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开发网   
核心提示: 如果你想处理情形(b),(c)和(d):避免拷贝,VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert(9),在 lambda 中观察局部变量的更新,以及在 lambda 中修改局部变量又该怎么做呢?在这种情况下,(3),局部变量 x 和 y

如果你想处理情形(b),(c)和(d):避免拷贝,在 lambda 中观察局部变量的更新,以及在 lambda 中修改局部变量又该怎么做呢?在这种情况下,你会想通过引用传递(capture by reference)。其语法是这种形式的 lambda 导引符 [&x, &y] (你可以把它想象成  X& x, Y& y ; 那是“引用”而不是“取址”)。

C:Temp>type capturekittybyreference.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(), [&x, &y](int& r) {
        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 capturekittybyreference.cpp > NUL && capturekittybyreference
0 0 0 6 24 60 120 210 336 504
8, 9

注意与 capturekittybymutablevalue.cpp 的区别:(1),lambda 导引符是 [&x, &y] ,(2)没有 mutable,(3),局部变量 x 和 y 最后的值是 8 和 9,反应了在 lambda 中对他们的修改。

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

Tags:VC 特性 Part

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