假设我们有A级:
class A
{
double x;
double y;
A(double, double);
function <double(void)> F;
};
以下构造函数:
A::A(double a, double b)
{
x = a;
y = b;
F = [this]() { return x + y; };
}
为什么上述构造函数在下面的构造函数导致编译错误时起作用:member A::x is not a variable
? (y
的错误相同。)
A::A(double a, double b)
{
x = a;
y = b;
F = [x,y]() { return x + y; };
}
似乎我只能捕获this
而不是类成员。那是为什么?
答案 0 :(得分:9)
来自cppreference – Lambda expressions:
没有初始值设定项的捕获无法显式捕获类成员(如上所述,捕获列表中只允许使用变量):
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)
}
};