C ++闭包语法错误

时间:2012-08-08 14:21:05

标签: c++ c++11 lambda closures

这里的语法有什么问题?我关注this资源。

char x = 'a', y = 'a';

[&x,=y]() { // error: expected identifier before '=' token
  ++x; ++y; // error: 'y' is not captured
}();

我使用带有-std=c++0x

的MinGW g ++ 4.5.2命令行编译器

澄清:我想按价值传递y

1 个答案:

答案 0 :(得分:4)

char x = 'a', y = 'a';

[&x,y]() mutable{
  ++x; ++y;
}();

Live example.

是否是正确的代码。要捕获可变的按值,只需写下其名称即可。要允许修改按值捕获,需要将lambda标记为mutable,否则将operator()标记为const

§5.1.2 [expr.prim.lambda] p5

  

[...]此函数调用运算符声明为const(9.3.1)当且仅当 lambda-expression 参数声明子句< / em>后面没有 mutable 。 [...]