WEB开发网
开发学院软件开发VC VC10中的C++0x特性 Part 1:Lambdas,auto,以及 ... 阅读

VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert

 2009-06-10 20:07:49 来源:WEB开发网   
核心提示: 当编译器看到 lambda 中的 x 和 y, 就会从main() 中按值传递(capture),VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert(8),情形(a)要修改通过传递(capture)获得拷贝该怎样呢?默认情况下,一个 lam

当编译器看到 lambda 中的 x 和 y, 就会从 main() 中按值传递(capture)。

情形(a)要修改通过传递(capture)获得拷贝该怎样呢?默认情况下,一个 lambda 函数调用操作符是 const 属性的,但是可以通过使用 mutable 把它变成 non-const。

C:Temp>type capturekittybymutablevalue.cpp
#include <algorithm>
#include <iostream>
#include <ostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;

    for (int i = 0; i < 10; ++i) {
        v.push_back(i);
    }

    int x = 1;
    int y = 1;

    for_each(v.begin(), v.end(), [=](int& r) mutable {
        const int old = r;

        r *= x * y;

        x = y;
        y = old;
    });

    for_each(v.begin(), v.end(), [](int n) { cout << n << " "; });
    cout << endl;

    cout << x << ", " << y << endl;
}

C:Temp>cl /EHsc /nologo /W4 capturekittybymutablevalue.cpp > NUL && capturekittybymutablevalue
0 0 0 6 24 60 120 210 336 504
1, 1

这里是依次将 v 中前两个元素相乘。(我得承认真的很难想出一个不用 partial_sum() 或 adjacent_difference() 表示的例子,partial_sum() 是与前面所有的元素相乘,adjacent_difference()是与前一个元素相乘)。注意到情形(d),对通过传递获得的拷贝的更新操作并没有影响局部变量(再一次,原始值语义)。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:VC 特性 Part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接