C ++ 0x lambda捕获的值总是const?

有没有办法通过价值捕获,并使捕获的值非常量? 我有一个库函子,我想捕获和调用非const的方法,但应该是。

以下不编译,但使foo :: operator()const修复它。

struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; } 

使用可变。

 auto bar = [=] () mutable -> bool .... 

没有mutable,你声明lambda对象const的operator()。

还有另一种使用mutable的方法 (由Crazy Eddie提出的解决scheme)。

[=]您的块通过值捕获所有对象。 您可以使用[&]通过引用捕获所有对象:

 auto bar = [&] () -> bool 

或者你可以通过引用只捕捉某个对象[=,&afoo]

 auto bar = [=, &afoo] () -> bool 

有关详细信息,请参阅此页面( 说明部分): http : //en.cppreference.com/w/cpp/language/lambda