有没有办法按值捕获,并使捕获的值非常量?我有一个我想要捕获的库函子&调用一个非常量但应该是的方法。
以下不编译,但使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;
}
答案 0 :(得分:132)
使用mutable。
auto bar = [=] () mutable -> bool ....
如果没有mutable,则声明lambda对象const的operator()。
答案 1 :(得分:-4)
有另外一种方法可以使用 mutable (Crazy Eddie提出的解决方案)。
使用 [=] ,您的块会按值捕获所有对象。您可以使用 [&] 按引用捕获所有对象:
auto bar = [&] () -> bool
或者您只能通过引用捕获某些对象 [=,& afoo] :
auto bar = [=, &afoo] () -> bool
有关详细信息,请参阅此页(说明部分): http://en.cppreference.com/w/cpp/language/lambda