我在下面进行了快速测试:
#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。
谢谢!
最佳答案
您使用 [=]
进行捕获,这意味着 lambda 获得 i
的拷贝。此拷贝独立于 main
中的 i
。
您需要做的是通过引用捕获 [&]
,以便将更改应用到 main
中的 i
。
关于C++11:可变的 lambda 似乎不会改变变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328689/