C++语法错误

C++语法错误,c++,c++11,lambda,closures,C++,C++11,Lambda,Closures,这里的语法有什么问题?我关注资源 char x = 'a', y = 'a'; [&x,=y]() { // error: expected identifier before '=' token ++x; ++y; // error: 'y' is not captured }(); 我使用MinGW g++4.5.2命令行编译器和-std=c++0x 澄清:我想通过值传递y 是正确的代码。要按值捕获变量,只需编写其名称。为了允许修改by值捕获,需要将lambda标记为可变的,

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

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

[&x,=y]() { // error: expected identifier before '=' token
  ++x; ++y; // error: 'y' is not captured
}();
我使用MinGW g++4.5.2命令行编译器和-std=c++0x

澄清:我想通过值传递y

是正确的代码。要按值捕获变量,只需编写其名称。为了允许修改by值捕获,需要将lambda标记为可变的,否则将运算符标记为const

§5.1.2[expr.prim.lambda]p5

[…]当且仅当lambda表达式的参数声明子句后面没有mutable时,此函数调用运算符被声明为const 9.3.1。[……]

是正确的代码。要按值捕获变量,只需编写其名称。为了允许修改by值捕获,需要将lambda标记为可变的,否则将运算符标记为const

§5.1.2[expr.prim.lambda]p5

[…]当且仅当lambda表达式的参数声明子句后面没有mutable时,此函数调用运算符被声明为const 9.3.1。[……]


要增加y的值,必须通过引用捕获它。要通过值捕获,只需写入y就足够了。无需将`=y'@AdityaKumar all true写入,但OP只是试图从博客文章中编译一个示例,其中博客作者专门通过值传递了第二个参数,以表明增量的效果不会影响封闭变量,因为通过值是一个副本。默认情况下,无法修改通过值捕获。关于它的各种问题,例如@BoBTFish:我明白了-谢谢,现在已经很清楚了。要增加y的值,必须通过引用来捕获它。要通过值捕获,只需写入y就足够了。无需将`=y'@AdityaKumar all true写入,但OP只是试图从博客文章中编译一个示例,其中博客作者专门通过值传递了第二个参数,以表明增量的效果不会影响封闭变量,因为通过值是一个副本。默认情况下,无法修改通过值捕获。关于它的各种问题,例如@BoBTFish:我明白了-谢谢,现在很清楚了。你的实例使用C++11,这是有效的C++03语法吗?@Wolf问题是关于lambdas的。你的实例使用C++11,这是有效的C++03语法吗?@Wolf问题是关于lambdas的。
char x = 'a', y = 'a';

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