为什么lambda参数在C ++ 11中以只读方式传递?

时间:2014-12-31 00:32:03

标签: c++11 lambda

当函数按值获取参数时,通常可以修改它。然而,lambdas似乎并非如此。为什么呢?

int main()
{
  int x = 0;
  auto lambda = [x] { x = 1; }; // error: assignment of read-only variable ‘x’
  return 0;
}

1 个答案:

答案 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的副本。

注意:这是一份更改功能的提案文件。