2011-03-25 175 views
3

我想了解lambda表達式。C++ lambda表達式

它超過了我的頭。需要自我解釋的例子

請!

+1

你可以看看msdn文檔中的lambda表達式... http://msdn.microsoft。 COM/EN-US /庫/ dd293608.aspx – 2011-03-25 13:03:27

回答

4

如果你熟悉當前的C++函子(即,實現operator()使他們可以這樣調用的函數,但是有內部數據成員可以初始化類),那麼基本上lambda表達式對於該語言功能來說是一個很好的擴展,它使您能夠創建函子並在它們將被調用的位置初始化它們,而不必定義函子類。 Lambdas也非常靈活,因爲它們可以是閉包,允許您「捕獲」當前範圍內任何變量的值。

我覺得這是對的Visual C++團隊博客一個真正偉大的資源,通過大量的這些特點去: Lambdas, auto, and static_assert: C++0x Features in VC10, Part 1

希望這有助於

傑森

4

lambda表達式是用於指定一個函數對象的機制。 lambda的主要用途是指定由某個函數執行的簡單操作。例如:

vector<int> v = {50, -10, 20, -30}; 

std::sort(v.begin(), v.end()); // the default sort 
// now v should be { -30, -10, 20, 50 } 

// sort by absolute value: 
std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); }); 
// now v should be { -10, 20, -30, 50 } 

的參數[&](int a, int b) { return abs(a)<abs(b); }是一個「拉姆達」(或「lambda函數」或「lambda表達式」),它指定了給定的兩個整型參數a和b的操作返回比較它們的絕對的結果值。

[&]是一個「捕獲列表」,指定使用的本地名稱將通過引用傳遞。我們可以說我們只想「捕捉」v,我們可以這麼說:[& v]。如果我們想通過價值傳遞v,我們可以這麼說:[= v]。不捕獲任何東西[],捕獲所有引用是[&],並通過值捕獲所有[=]。

http://www2.research.att.com/~bs/C++0xFAQ.html#lambda

2

也是另一個例子,如果你會喜歡:

#include <iostream> 
#include <vector> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    // Initialization C++0x-style 
    vector<int> voo = { 1, 2, 3, 4, 5 }; 

    // Lambda is here 
    auto print = [&](int& i) { cout << i << endl; } ; 

    // Check that out, no loop ! 
    for_each(voo.begin(), voo.end(), print); 

    return 0; 
}