102 有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获并调用一个非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; } c++ lambda const c++11 — 扎克 source
165 使用可变的。 auto bar = [=] () mutable -> bool .... 如果没有可变,则声明了lambda对象const的operator()。 — 爱德华·斯特兰奇 source
-5 有使用可变的替代方法(由Crazy Eddie提出的解决方案)。 使用[=],您的块按值捕获所有对象。您可以使用[&]通过引用捕获所有对象: auto bar = [&] () -> bool 或者,您可以通过引用仅捕获某些对象[=,&afoo]: auto bar = [=, &afoo] () -> bool 请参阅此页面以获取详细信息(“ 说明”部分):http : //en.cppreference.com/w/cpp/language/lambda — 弗拉德 source 11 这会做完全不同的事情。它们不可互换。这没有回应OP的问题。 — 爱德华·斯特朗奇 1 此解决方案的问题在于,它不适用于在执行lambda之前(例如,当您启动分离的std :: thread时)销毁的捕获的局部变量。 — 西蒙·尼农