当一个函数按值获取参数时,它通常可以修改它.然而,lambdas似乎并非如此.为什么?
int main()
{
int x = 0;
auto lambda = [x] { x = 1; }; // error: assignment of read-only variable ‘x’
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Herb Sutter在这里回答了以下问题;
考虑这个稻草人的例子,程序员通过值捕获局部变量,然后尝试修改捕获的值(它是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’
Run Code Online (Sandbox Code Playgroud)
添加此功能的原因是担心用户可能不会意识到自己获得了副本,尤其是由于Lambda是可复制的,因此他可能会更改其他Lambda的副本。
注意:这是更改功能的建议书。
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |