为什么我的lambda表达式在成员函数中的主体没有被执行?

Liu*_*ick 2 c++ lambda c++11

最近我一直在研究lambda表达式,跟随lambda代码让我感到惊讶:

#include <iostream>

class lambda_this_test
{
private:
    int mNumber;
public:
    lambda_this_test()
    {
        mNumber = 11;
    };
    void print_member()
    {
        //lambda expression
        [this]{mNumber = 12; std::cout<< "mNumber = \n"<<mNumber<<std::endl;};
    }
};

int main()
{
    lambda_this_test testClass;

    testClass.print_member();
}
Run Code Online (Sandbox Code Playgroud)

执行时,看不到任何打印,因此似乎根本不执行lambda表达式的主体,然后我使用gdb来证明这一点,因为print_member()函数中没有代码.

请问我使用lambda有什么问题?

Pio*_*cki 11

看起来你忘了执行你的lambda表达式; 你应该添加parens:

[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;} ();
//                                                          ^^
Run Code Online (Sandbox Code Playgroud)

也就是说,以下声明:

[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};
Run Code Online (Sandbox Code Playgroud)

只声明一个lambda表达式.或者,您可以写:

auto lambda = [this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};

lambda();
Run Code Online (Sandbox Code Playgroud)