最近我一直在研究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有什麼問題?
嗨,看起來lambda表達式的正式風格之一是 [capture-list](parametr){body},你最後的「()」是什麼意思? – 2014-09-02 07:11:28
@LiuNick:是的,當你聲明lambda時,這是它的樣子:[capture-list](parametr){body};但這就像聲明一個函數一樣 - 直到調用它纔會起作用。 'lambda()'執行你的lambda體,並且lambda本身可以被「內聯」,'[capture-list](parametr){body}();'調用你的lambda – 2014-09-02 13:09:15