通过引用捕获C ++ Lambda

cod*_*iac 0 c++ lambda

据我所知,运行以下代码后,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。为什么它的行为不符合我的预期?

Yam*_*vic 5

通过指定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)