C lambda 表示式 函式

2022-06-22 13:03:14 字數 1239 閱讀 9625

lambda 可以方便地定義和建立匿名函式。

[capture list] (params list) mutable exception-> return type

各項具體含義如下

capture list:捕獲外部變數列表

params list:形參列表      (可省略)

mutable指示符:用來說用是否可以修改捕獲的變數  (可省略)

exception:異常設定  (可省略)

return type:返回型別       (可省略,如省略則自動從函式體中判斷返回型別,return後的值。如果沒有則返回void)

function body:函式體

通過在最前面的方括號中輸入一些特殊符號,明確指出哪些外部變數可以被lambda函式捕獲。

(1) 值捕獲[變數名]

函式體內不能改變捕獲變數的值,否則會引起編譯錯誤。相當於函式引數中的值傳遞,會對值進行乙個拷貝。

int main()

; a = 321;

f(); // 輸出:123

}

(2) 引用捕獲[&變數名]

相當於函式引數中的引用傳遞,不會做拷貝,其值會隨外部的變數改變而改變。在函式體內可以對變數進行修改。

int main()

; a += 1;

f(); // 輸出:125

}

(3) 隱式捕獲 [=] [&]

中不寫明變數名,具體捕獲哪個變數有函式體內的語句自動判斷。也有兩種捕獲方式:

[=]:值捕獲所有外部變數,同(1)值捕獲

[&]: 引用捕獲所有外部變數,同(2)引用捕獲

(4) 混合方式,以逗號分離不同的方式

(5) 關鍵字,修改值捕獲變數,mutable

如果加mutable關鍵字,則表明引數的括號()不能省

int

main()

; //

不會報錯

cout << a << endl; //

輸出:123

f(); //

輸出:124

}

vector myvec;

sort(myvec.begin(), myvec.end(), (

int a, int b) -> bool ); //

lambda表示式

16:25:40

lambda表示式 C Lambda表示式

lambda宣告 lambda introducer。在內部,你可以指明乙個capture用來處理外部作用域內未被傳遞為實參的資料。意味著外部作用域以by value的方式傳遞給lambda。在lamdba中不能改變其值 為什麼?意味著外部作用域以by reference的方式傳遞給lambda。因...

C Lambda匿名函式表示式

函式物件引數 形參 mutable 或 exception 宣告 返回值型別 表示表示式的開始,必須有 用來設定如何捕獲匿名函式外的變數 裡為空,表示任何變數都不會傳遞給lambda表示式,沒有引數 int a 10 int b 20 intc int x int 不能捕獲匿名函式外的所有變數 st...

C lambda表示式複習

include include include include using namespace std int main lambda表示式也就是乙個函式,我們可以把它賦給函式指標,也可以在後面加上括號使用。裡面可以新增一些限制lambda塊語句中使用外部變數的限制符。一共有四種情況 1.空白表示不...