C++11匿名函數(lambda函數,lambda表達式)

Lambda 表達式的定義形式如下:

// [外部變量訪問方式說明符] (參數表) -> 返回值類型 {語句塊}
[capture](parameters)->return-type{body}

其中:

  • “外部變量訪問方式說明符”可以是=或&,表示 {} 中用到的、定義在 {} 外面的變量在 {} 中是否允許被改變。
  • 在 {} 中也可以不使用定義在外面的變量。
  • 如果沒有參數,空的圓括號 () 可以省略
  • “-> 返回值類型”可以省略。

具體含義如下:

[]        //未定義變量.試圖在Lambda內使用任何外部變量都是錯誤的.
[x, &y]   //x 按值捕獲, y 按引用捕獲.
[&]       //用到的任何外部變量都隱式按引用捕獲
[=]       //用到的任何外部變量都隱式按值捕獲
[&, x]    //x顯式地按值捕獲. 其它變量按引用捕獲
[=, &z]   //z按引用捕獲. 其它變量按值捕獲

例子:
下面是一個合法的Lambda表達式:

[=] (int x, int y) -> bool {return x%10 < y%10;}

Lambda 表達式實際上是一個函數,只是它沒有名字。下面的程序段使用了上面的 Lambda 表達式:

int a[4] = {11, 2, 33, 4};
sort(a, a+4, [=](int x, int y) -> bool { return x%10 < y%10; } );
for_each(a, a+4, [=](int x) { cout << x << " ";} );

這段程的輸出結果是:
11 2 33 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章