问题是程序打印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;
}
答案 0 :(得分:8)
因为id
是按值捕获的,即它被复制了。并且在声明lambda时(即,发生捕获时),id
的值为0
。
您可能希望将其更改为通过引用捕获。
auto f = [&id] () {
// ^
std::cout << "id: " << id << std::endl;
++id;
};
顺便说一句:在这种情况下,mutable
变得多余了。