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

dra*_*oot 13 lambda c++11

当一个函数按值获取参数时,它通常可以修改它.然而,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)

Alp*_*per 5

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

注意:这是更改功能的建议书。