在C++ LAMBDA函数中捕获成员变量
为什么它不能与类成员一起工作,但可以与内部定义的变量一起工作 做另一件事{ 做某事[x]{}; }在C++ LAMBDA函数中捕获成员变量,c++,C++,为什么它不能与类成员一起工作,但可以与内部定义的变量一起工作 做另一件事{ 做某事[x]{}; } 问题是x不是lambda定义直接作用域内的变量。因此,它无法被捕获。同意x是在函数上方声明的类成员,但这并不能使它对lambda可见。您可以捕捉到这一点。,添加到上述链接,这里是iso标准参考:-§5.1.2 Lambda表达式13。。。如果lambda表达式捕获了一个实体,而该实体未在立即封闭的lambda表达式或函数中定义或捕获,则程序的格式错误。。。 class A{ public:
问题是x不是lambda定义直接作用域内的变量。因此,它无法被捕获。同意x是在函数上方声明的类成员,但这并不能使它对lambda可见。您可以捕捉到这一点。,添加到上述链接,这里是iso标准参考:-§5.1.2 Lambda表达式13。。。如果lambda表达式捕获了一个实体,而该实体未在立即封闭的lambda表达式或函数中定义或捕获,则程序的格式错误。。。
class A{
public:
void do_something(std::function<void()> const& f) {
}
};
class B: public A{
public:
int x = 0;
void do_another_thing(){
do_something([x]{});
}
};
16:20: error: capture of non-variable 'B::x'
14:13: note: 'int B::x' declared here