当函数按值接受参数时,通常可以对其进行修改。但是,lambda似乎并非如此。为什么?
int main()
{
int x = 0;
auto lambda = [x] { x = 1; }; // error: assignment of read-only variable ‘x’
return 0;
}
最佳答案
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的副本。
注意:这是更改功能的建议书。
关于c++11 - 为什么在C++ 11中按值传递的lambda参数是只读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714616/