问题是为什么程序打印 id:0, id:1, id:2, 42 而不是 id:42、id:43、id:44、45。
int main()
{
int id = 0;
auto f = [id] () mutable {
std::cout << "id: " << id << std::endl;
++id; // OK
};
id = 42;
f();
f();
f();
std::cout << id << std::endl;
return 0;
}
最佳答案
因为 id
是按值捕获的,即它被复制了。当 lambda 被声明时(即捕获发生时)id
的值为 0
。
您可能希望将其更改为按引用捕获。
auto f = [&id] () {
// ^
std::cout << "id: " << id << std::endl;
++id;
};
顺便说一句:对于这种情况,mutable
变得多余。
关于c++ - 为什么 lambda 取变量的初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52307913/