区分b / w从C ++ lambdas中捕获的变量中捕获`this`成员

时间:2017-10-18 12:29:33

标签: c++ lambda

我想知道在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);
    }
};

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);
    }
};