我在下面做了一个快速测试:
#include<iostream>
using namespace std;
int main(){
int i=2;
auto f=[=]()mutable{++i;};
f();
f();
cout<<i<<endl;
return 0;
}
但是结果仍然显示为“2”。为什么我在可变的lambda中没有被修改?我正在使用clang --std = c++ 1z。
谢谢!
最佳答案
int i=2;
auto f=[=]()mutable{++i;};
f();
f();
std::cout<<i<<std::endl;
打印2。
int i=2;
auto f=[&](){++i;};
f();
f();
std::cout<<i<<std::endl;
打印4。
int i=2;
auto f=[=]()mutable{++i; std::cout << i << std::endl;};
f();
f();
std::cout<<i<<std::endl;
打印3 4 2。
=
将捕获的数据复制到lambda中。如果是
mutable
,则可以修改副本。&
引用了lambda中捕获的数据。通过引用修改内容是合法的。
在这种情况下,
[=]
与[i]
相同,并且[&]
与[&i]
相同(您可以显式列出捕获,也可以通过不列出捕获内容并使用=
或&
隐式捕获它们)。