【发布时间】:2021-02-07 23:51:07
【问题描述】:
我正在尝试这样的方法来使用字符串向量列表预填充地图。 代码不言自明:
Constructor(const vector<string>& names) {
for_each(names.begin(), names.end(),
[this, counter = 1](const String& choice) mutable {
nameMapping.emplace(choice, counter++);
}
);
}
我不太明白counter 是如何工作的?
仅供参考:counter 没有在 lambda 函数之外声明。
但是,我能够在类范围内创建一个局部变量并在可变 lambda fn 中对其进行修改?
有人可以帮我理解发生了什么。
【问题讨论】:
-
发生了什么,基本上,lambda 捕获是如何工作的。捕获的变量的类型是从初始化它的表达式的类型推断出来的。除了这就是 C++ lambda 的工作方式之外,这里真的没什么好说的了。
-
好像你可以写
auto counter = 1。