Lambda 表達式具體形式如下:
[capture list] (params list) mutable exception-> return type { function body }
各項具體含義如下
capture list:捕獲外部變量列表
params list:形參列表
mutable指示符:用來說用是否可以修改捕獲的變量
exception:異常設定
return type:返回類型
function body:函數體
[] // 沒有定義任何變量。使用未定義變量會引發錯誤。
[x, &y] // x以傳值方式傳入(默認),y以引用方式傳入。
[&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。
[=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。
[&, x] // x顯式地以傳值方式加以引用。其餘變量以引用方式加以引用。
[=, &z] // z顯式地以引用方式加以引用。其餘變量以傳值方式加以引用。
int main()
{
int x, y, z;
x = 10;
y = 20;
z = [&x,y](int &a, int b) -> int {
int demo;
a++;
b--;
demo = a * b;
return demo;
}(x, y);
cout << z << endl;
cout << x << endl;
cout << y << endl;
return 0;
}
打印結果:
209
11
20
代碼剖析:
[&x,y] : &x, 表示把x的地址傳進去, 在裏面修改x值,外面的x的值跟着改變 ,y表示把值傳進去, 修改y不改變外部y的值
(int &a,int b) 傳地址 需要使用&符號
(x,y) 閉包執行方法,傳入的參數