捕获 lambda 函数C++成员变量

Capturing member variable in C++ lambda function

本文关键字:成员 变量 C++ 函数 lambda 捕获      更新时间:2023-10-16
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]{});   
}
};

它说x不是一个变量:

16:20: error: capture of non-variable 'B::x' 
14:13: note: 'int B::x' declared here

为什么它不适用于类成员,但它适用于 do_another_thing(( 中定义的变量?

void do_another_thing(( {do_something([x]{
}(;
}

问题是 x 不是 lambda 定义直接范围内的变量。因此无法捕获它。同意x是函数上方声明的类成员,但这不会使其对 lambda 可见。您可以改为捕获此内容