gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:27:51 28 4
gpt4 key购买 nike

假设我们有 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 而不能捕获类成员。这是为什么?

最佳答案

来自 cppreference – Lambda expressions :

Class members cannot be captured explicitly by a capture without initializer (as mentioned above, only variables are permitted in the capture list):

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

关于c++ - 在 C++ lambdas 中捕获内部构造函数的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48684629/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com