[外部變數存取方式說明符] (參數列) -> 返回值型別
{
語句塊
}
=
或&
,表示{}
中用到的、定義在{}
外面的變數在{}
中是否允許被改變。=
表示不允許,&
表示允許。當然,在{}
中也可以不使用定義在外面的變數。“-> 返回值型別”可以省略。[=] (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 << " ";} );這段程的輸出結果是:
#include <iostream> #include <algorithm> using namespace std; int main() { int a[4] = { 1, 2, 3, 4 }; int total = 0; for_each(a, a + 4, [&](int & x) { total += x; x *= 2; }); cout << total << endl; //輸出 10 for_each(a, a + 4, [=](int x) { cout << x << " "; }); return 0; }程式的輸出結果如下:
[&]
表示該 Lambda 表示式中用到的外部變數 total 是傳參照的,其值可以在表示式執行過程中被改變(如果使用[=]
,編譯無法通過)。該 Lambda 表示式每次被 for_each 執行時,都將 a 中的一個元素累加到 total 上,然後將該元素加倍。[=, &x, &y]
表示外部變數 x、y 的值可以被修改,其餘外部變數不能被修改;[&, x, y]
表示除 x、y 以外的外部變數,值都可以被修改。#include <iostream> using namespace std; int main() { int x = 100,y=200,z=300; auto ff = [=,&y,&z](int n) { cout <<x << endl; y++; z++; return n*n; }; cout << ff(15) << endl; cout << y << "," << z << endl; }程式的輸出結果如下: