当函数按值获取参数时,通常可以修改它。然而,lambdas似乎并非如此。为什么呢?
int main()
{
int x = 0;
auto lambda = [x] { x = 1; }; // error: assignment of read-only variable ‘x’
return 0;
}
答案 0 :(得分:4)
Herb Sutter回答了问题here如下;
考虑这个稻草人的例子,程序员捕获一个本地人 按值变量并尝试修改捕获的值(这是一个 lambda对象的成员变量):
int val = 0;
auto x = [=](item e) // look ma, [=] means explicit copy
{ use(e,++val); }; // error: count is const, need ‘mutable’
auto y = [val](item e) // darnit, I really can’t get more explicit
{ use(e,++val); }; // same error: count is const, need ‘mutable’
此功能似乎是出于对用户的关注而添加的 可能没有意识到他得到了副本,特别是因为lambdas 可复制的他可能正在改变另一个lambda的副本。
注意:这是一份更改功能的提案文件。