【发布时间】:2016-08-29 10:58:25
【问题描述】:
试图理解 C++ 中的 lambda,我不明白的是:
int multiplier = 5;
auto timesFive = [multiplier](int a) { return a * multiplier; };
std::cout << timesFive(2) << '\n'; // Prints 10
multiplier = 15;
std::cout << timesFive(2) << '\n'; // Still prints 2*5 == 10 (???) - Should it be 30?
当程序第二次调用timesFive()时,我预计结果是30。但是为什么结果是Still prints 2*5 == 10,而不是prints 2*15 == 30?也许 lambda 函数无法跟踪 multiplier 的值,即使我们已经尝试捕获它?
而获得预期结果的方法是什么?
【问题讨论】:
-
请用标题描述问题。是的,您正在尝试理解 lambda,但这并不能告诉我们您实际要问的内容。 (我正在考虑自己编辑它,但我不喜欢我提出的想法。)