我想知道在C ++中使用lambdas进行捕获。 我知道lambda表达式只是" generator"对于一些仿函数类。 我想知道编译器如何区分被捕获的成员'这个'从生成的仿函数类的成员?
第二个问题:
在捕获列表阴影a_
下面的A::a_
下面的示例中。这种行为是否在标准中描述?我无法在任何地方找到答案。
class A {
int a_ = 0;
public:
void sth() {
auto l = [this, a_=1](int a) { a_ = a; };
l(1);
}
};
答案 0 :(得分:1)
将其分解(并修复错误):
class A {
int a_ = 0; // this is A::a_
public:
void sth() {
auto l =
[
this, // A::sth::lambda::l::_this
a_=a_ // A::sth::lambda::l::a_ = A::a_ // because the lambda's a_ does not exist until it's defined.
](int a) mutable
{
a_ = a; // A::sth::lambda::l::a_ = argument a
};
l(1);
}
};