我最近在c ++ 11中学习lambda函数.但我不知道[=]和之间是否有任何区别[&].如果有,那有什么区别?
而在这两种情况下,thislambda体内有什么区别吗?
Jar*_*Par 33
不同之处在于如何捕获值
& 通过引用捕获= 按价值捕获 快速举例
int x = 1;
auto valueLambda = [=]() { cout << x << endl; };
auto refLambda = [&]() { cout << x << endl; };
x = 13;
valueLambda();
refLambda();
Run Code Online (Sandbox Code Playgroud)
此代码将打印出来
1
13
Run Code Online (Sandbox Code Playgroud)
第一个lambda x在valueLambda定义的点处按值捕获.因此它获得了当前的价值1.但是它refLambda捕获了对本地的引用,因此它可以看到最新的值
我在这里回答是因为我想指出一件事:
this指针始终按值捕获.在C++ 11中,这意味着,如果要在类中捕获变量的副本,例如this->a,它将始终在实践中通过引用捕获.为什么?
考虑:
[this]() { ++this->a; }
Run Code Online (Sandbox Code Playgroud)
this是按值捕获的,但这是一个指针,因此引用了一个this.
如果你想要一个成员变量的副本,在C++ 11中,做这样的事情:
auto copy = this->a;
[copy]() mutable { ++copy; }
Run Code Online (Sandbox Code Playgroud)
要小心这个警告,因为在你想到它之前它并不直观.