2012-08-08 85 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