c 再學習(函式指標與lamba)

2021-09-26 13:12:38 字數 867 閱讀 4188

什麼是函式指標?

int cmp(int a,int b)

叫做捕獲說明符,表示乙個lambda表示式的開始。接下來是引數列表,即這個匿名的lambda函式的引數,->return-type表示返回型別,如果沒有返回型別,則可以省略這部分。想知道為什麼返回型別可以這麼表示,這涉及到c++11的另一特性,參見自動型別推導,最後就是函式體部分了。

我們可以這樣輸出"hello,world"

auto func = () ;

func(); // now call the function

變數捕獲與lambda閉包實現

string name;

cin >> name;

[&] ()();

lambda函式能夠捕獲lambda函式外的具有自動儲存時期的變數。函式體與這些變數的集合合起來叫閉包。

不擷取任何變數

[&} 擷取外部作用域中所有變數,並作為引用在函式體中使用

[=] 擷取外部作用域中所有變數,並拷貝乙份在函式體中使用

[=, &foo] 擷取外部作用域中所有變數,並拷貝乙份在函式體中使用,但是對foo變數使用引用

[bar] 擷取bar變數並且拷貝乙份在函式體重使用,同時不擷取其他變數

[x, &y] x按值傳遞,y按引用傳遞

[this] 擷取當前類中的this指標。如果已經使用了&或者=就預設新增此選項。

看到這,不禁要問,這魔法般的變數捕獲是怎麼實現的呢?原來,lambda是通過建立個小類來實現的。這個類過載了操作符(),乙個lambda函式是該類的乙個例項。當該類被構造時,周圍的變數就傳遞給建構函式並以成員變數儲存起來。看起來跟函式物件很相似。

最後,lambda函式的型別是什麼呢,答案是std:function。

學習python(九) 閉包函式與lamba

閉包,又稱閉包函式或者閉合函式,其實和前面講的巢狀函式類似,不同之處在於,閉包中外部函式返回的不是乙個具體的值,而是乙個函式。一般情況下,返回的函式會賦值給乙個變數,這個變數可以在後面被繼續執行呼叫。閉包比普通的函式多了乙個 closure 屬性,該屬性記錄著自由變數的位址。當閉包被呼叫時,系統就會...

C語言再學習 函式

一 函式概述 1 首先什麼是函式?函式是用於完成特定任務的程式 的自包含單元。2 為什麼使用函式?第 一 函式的使用可以身故重複 的編寫。第 二 函式使得程式更加模組化,有利於程式的閱讀修改和完善。3 main函式原型 int main int argc,char argv,char envp 第乙...

c 再學習(內聯函式)

什麼是內聯函式?以inline修飾的函式叫做內聯函式,編譯時c 編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率。內聯函式與普通函式執行過程有何不同?普通函式的執行過程中,首先要儲存暫存器的位置,然後傳入引數 這時程式轉到函式處執行,然後再返回,而內聯函式不需要這麼...