据我所知,运行以下代码后,myString应该具有值“ Inside lambda3.secondLambda”。相反,它将仍然具有“ Initialized”值。
std::string myString("Initialized");
auto lambda3 = [&]() { [&myString]() { myString = "Inside lambda3.secondLambda"; }; };
Run Code Online (Sandbox Code Playgroud)
第一个lambda通过引用捕获所有变量,第二个lambda通过引用捕获仅myString。为什么它的行为不符合我的预期?
通过指定lambda的主体,可以指定在调用lambda时将被调用的代码operator()。
因此,您实际上需要调用lambda,否则,它只是函数定义内的代码,而这些代码永远不会被调用。你可以做:
auto lambda3 = [&] {
auto l = [&myString] {
myString = "Inside lambda3.secondLambda";
};
l();
};
lambda3();
Run Code Online (Sandbox Code Playgroud)
要更进一步,您可以返回内部lambda,然后像这样执行它:
auto lambda3 = [&] {
return [&myString] {
myString = "Inside lambda3.secondLambda";
};
};
lambda3()();
Run Code Online (Sandbox Code Playgroud)