【发布时间】:2017-01-24 13:39:44
【问题描述】:
我想知道为什么我可以在 lamdas 中使用全局变量(感谢 Chris Drew 纠正我)以及为什么我不需要捕获它们:
#include <iostream>
#include <vector>
using namespace std;
size_t i = 0;
vector<int> v = {1,2,3};
int main()
{
auto lambda = [](){i = v.size();};
lambda();
cout << i << endl;
return EXIT_SUCCESS;
}
在这个最小的工作示例中,我正在访问 size_t 和向量而不捕获它们。如果它们在主方法中声明,我将不得不这样做。为什么会这样,我如何复制 size_t 和向量?我尝试使用[=] 作为捕获列表,但它不会复制v 和i。
【问题讨论】:
-
它们是全局变量
-
请比“不起作用”更具体。发布一个“不起作用”的程序并解释它有什么问题。
-
@ChrisDrew 简洁的幽默让人精神振奋;)
标签: c++ list variables lambda capture