如何在C++中使用lambda作为词法范围

Han*_*Sun 2 c++ lambda functional-programming function lexical-scope

代码是这样的:

int a = 1;
auto f = [a] {return a;};
a = 100;
std::cout << f() << endl;
return 0;
Run Code Online (Sandbox Code Playgroud)

我希望看到100结果.然而,a就像在被捕时被冻结一样f.结果是1.变化a时有没有办法保持一致a

mfo*_*ini 6

您需要a通过引用捕获:

auto f = [&a] {return a;};
Run Code Online (Sandbox Code Playgroud)

或者通过引用简单地捕获整个环境:

auto f = [&] {return a;};
Run Code Online (Sandbox Code Playgroud)