C++闭包语法错误

C++ closure syntax error

本文关键字:错误 语法 闭包 C++      更新时间:2023-10-16

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

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

char x = 'a', y = 'a';
[&x,y]() mutable{
  ++x; ++y;
}();

活生生的例子。

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

§5.1.2 [expr.prim.lambda] p5

[...]当且仅当 lambda 表达式参数声明子句后不跟 mutable,则此函数调用运算符声明const (9.3.1)。[...]