c++ lambda的使用和介紹

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) 閉包執行方法,傳入的參數

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