在C++ LAMBDA函数中捕获成员变量

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

为什么它不能与类成员一起工作,但可以与内部定义的变量一起工作

做另一件事{ 做某事[x]{}; }


问题是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