有人可以解釋我爲什麼localVar被增加1後重置爲10?看起來lambdas在執行它們之前在堆棧上創建按值捕獲的副本。lambda函數C++通過值捕獲重置其值,爲什麼?
void lambdaTest()
{
int localVar = 10;
// Access all local variables by reference
auto byRef = [&]()
{
cout << "localVar = " << ++localVar << endl;
};
// Access all local variables by value
auto byValue = [=]() mutable
{
cout << "localVar = " << localVar << endl;
};
byRef(); // localVar = 11
byValue(); // localVar = 10, why?
}
這些值在定義lambda時捕獲,而不是在使用時捕獲。 –
假設你返回了按值lambda而不是調用它。 'localVar'甚至不存在,因此在使用點捕獲有點棘手。 – chris