最近我一直在研究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();
}在执行时,看不到任何印记,因此似乎根本没有执行lambda表达式的主体,然后我使用gdb来证明这一点,因为print_member()函数中没有代码。
我可以问一下我的lambda用法有什么问题吗?
发布于 2014-09-01 16:12:37
看起来您忘记执行您的lambda表达式了;您应该添加括号:
[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;} ();
// ^^也就是说,下面的语句:
[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};仅声明lambda表达式。或者,您可以这样写:
auto lambda = [this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};
lambda();https://stackoverflow.com/questions/25601445
复制相似问题