2012-08-08 84 views
2

这里的语法有什么问题?我遵循this资源。C++关闭语法错误

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

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

我使用的MinGW克++ 4.5.2命令行编译与-std=c++0x

澄清:我想通过值传递y

+4

增加'y'的值,它必须通过引用捕获。只要写'y'就足够了。不需要写'= y' – 2012-08-08 14:25:23

+0

它也在4.7.0中失败。 – 2012-08-08 14:27:30

+0

@AdityaKumar都是真的,但OP只是试图编写一个博客文章中的示例,其中博客作者专门通过值传递第二个参数来显示增量的影响不会影响已关闭的变量(因为按值传递是副本)。 – 2012-08-08 14:34:24

回答

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)当且仅当所述λ-表达参数声明子句后面没有由mutable。 [...]

+0

您的实例使用C++ 11,这是否是有效的C++ 03语法? – Wolf 2014-09-25 10:17:29

+0

@Wolf这个问题是关于lambda的。 – 2014-09-25 12:40:08