C ++ 0x lambda按值捕获总是const?
Posted
技术标签:
【中文标题】C ++ 0x lambda按值捕获总是const?【英文标题】:C++0x lambda capture by value always const? 【发布时间】:2011-02-19 14:35:00 【问题描述】:有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获并调用一个非常量但应该是的方法。
以下内容无法编译,但将 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;
【问题讨论】:
【参考方案1】:使用可变的。
auto bar = [=] () mutable -> bool ....
如果没有 mutable,您将声明 lambda 对象的 operator () const。
【讨论】:
【参考方案2】:还有使用 mutable 的替代方法(Crazy Eddie 提出的解决方案)。
使用 [=],您的块可以按值捕获所有对象。您可以使用 [&] 通过引用捕获所有对象:
auto bar = [&] () -> bool
或者您可以通过引用仅捕获某些对象[=, &afoo]:
auto bar = [=, &afoo] () -> bool
有关详细信息,请参阅此页面(说明部分): http://en.cppreference.com/w/cpp/language/lambda
【讨论】:
这完全不同。它们不可互换。这没有回答 OP 的问题。 这个解决方案的问题是它对捕获的局部变量在执行lambda之前销毁(例如,当你启动一个分离的std::thread时)不起作用。以上是关于C ++ 0x lambda按值捕获总是const?的主要内容,如果未能解决你的问题,请参考以下文章
在 C++11 中按值或引用使用 lambda 默认捕获的缺点?