最近我一直在研究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)