c 11匿名函式Lambda

2021-09-05 10:55:56 字數 1066 閱讀 3161

定義乙個lambda函式:

auto f =

[capture]

(params)opt-

>ret;f

();//呼叫函式

其中:

capture表示捕獲函式作用域外的外部變數

params是引數(非必須)

opt是函式選項,例如可選擇是否允許更改capture到的外部變數

ret表示函式返回型別,一般可以免了,因為我們在f前面用了auto

body是函式體

例子:

int

main()

;//按值捕獲外部變數a1, 函式引數是b,返回a+b

cout <4)

<< endl;

//輸出:5

auto f2 =[=

](int b)

;//按值捕獲所有外部變數, 函式引數是b,返回所有外部變數和b的和

cout <4)

<< endl;

//輸出:10

auto f3 =[&

](int b)

;//按引用捕獲所有外部變數, 函式引數是b,返回所有外部變數和b的和

a1 =2;

cout <4)

<< endl;

//輸出:11

auto f4 =[&

,a3]

(int b)

;//按值引用a3並按引用捕獲其它外部變數, 返回所有外部變數和b的和

a3 =2;

cout <4)

<< endl;

//輸出:10

auto f5 =[&

];//錯誤:所有外部變數複製都是const的,不能修改;

auto f5 =[&

]()mutable

;//ok:加了mutable選項後外部變數可以修改;

}classa;

//錯誤:沒有捕獲任何變數

auto f =

[this];

//ok: 捕獲當前類的this指標,故能訪問val

}

lambda 函式或者匿名函式(C 11)

lambda 函式也就是沒有名字的函式,一般情況下,在任何地方,如果需要把乙個函式作為引數給出,但你寧願給出乙個簡短即時函式定義,而不是乙個指向原始檔其他地方或者另乙個模組中提供的定義的指標時,lambda 函式可能是有用的,lambda 函式可以作為 動態 給出的乙個快捷方便的函式,而不是正式定義...

C 11中的匿名函式(lambda)

c 11提供了對匿名函式的支援,稱為lambda函式 也叫lambda表示式 下面舉了幾個lambda函式的例子 int x,int y 隱式返回型別 int x 沒有return語句 lambda 函式的返回型別是 void 沒有引數,僅訪問某個全域性變數 與上乙個相同,省略了 指定返回型別 in...

C 11新特性 Lambda函式(匿名函式)

c 11終於知道要在語言中加入匿名函式了。匿名函式在很多時候可以為編碼提供便利,這在下文會提到。很多語言中的匿名函式,如c 都是用lambda表示式實現的。lambda表示式又稱為lambda函式。我在下文中稱之為lambda函式。為了明白lambda函式的用處,請務必先搞明白c 中的自動型別推斷 ...