在c ++ lambdas中捕获内部构造函数的类成员

Rom*_*man 7 c++ lambda

假设我们有A级:

class A
{
    double x;
    double y;
    A(double, double);
    function <double(void)> F;
};
Run Code Online (Sandbox Code Playgroud)

以下构造函数:

A::A(double a, double b)
{
    x = a;
    y = b;
    F = [this]() { return x + y; };
}
Run Code Online (Sandbox Code Playgroud)

为什么上述构造的工作,而下面的构造会导致编译错误:member A::x is not a variable?(相同的错误y.)

A::A(double a, double b)
{
    x = a;
    y = b;
    F = [x,y]() { return x + y; };
}
Run Code Online (Sandbox Code Playgroud)

我似乎只能捕捉this而不是集体成员.这是为什么?

Aur*_*ílý 9

来自cppreference - Lambda表达式:

没有初始化程序的捕获不能显式捕获类成员(如上所述,捕获列表中只允许变量):

class S {
  int x = 0;
  void f() {
    int i = 0;
//  auto l1 = [i, x]{ use(i, x); };    // error: x is not a variable
    auto l2 = [i, x=x]{ use(i, x); };  // OK, copy capture
    i = 1; x = 1; l2(); // calls use(0,0)
    auto l3 = [i, &x=x]{ use(i, x); }; // OK, reference capture
    i = 2; x = 2; l3(); // calls use(1,2)
  }
};
Run Code Online (Sandbox Code Playgroud)