c 匿名函式考察點

2021-10-17 18:49:01 字數 2045 閱讀 7157

一般的函式形式以及呼叫形式

int

foo(

int a,

int b)

foo(1,

2)

首先是匿名函式形式

//捕獲列表 預設是按值捕獲

()//引數列表

->int //函式返回值

int c2 =

(int a,

int b)

->

int(1,

2);//為了能夠復用lamba表示式

auto f=

(int a,

int b)

->

int;

int c3 =f(

1,2)

;

巢狀的lamba表示式 (函式式程式設計)

int c4=

(int n)(2

);}(1);

為了能夠復用巢狀的lamba表示式

上面的式子等價於

auto f2=

(int n);}

;int c5 =f2(

1)(2

);

這裡有乙個常考點,捕獲列表,預設是按值捕獲,(內部修改不會影響外部)

mutable是為了匿名函式t能夠++t,不然報錯t是右值,不能修改。

int t =10;

auto f3 =

[t](

)mutable

->

int;

auto f4 =

[t](

)mutable

->

int;

//我們發現其實每個同個匿名內部都是按 值 捕獲 ,不會改變外部的值,但是每次呼叫f3 f3內部會維持同乙個位址 f4內部也會維持乙個位址 f3,f4變數互不影響。

cout <

)<< endl;

cout <

)<< endl;

cout <

)<< endl;

cout <

)<< endl;

cout << t << endl;

上面充分說明了匿名內部是按 值 捕獲,我們看看執行結果

我們發現其實每個同個匿名內部都是按 值 捕獲 ,不會改變外部的值, f3內部會維持乙個位址 f4內部也會維持乙個位址 f3,f4變數互不影響。也就是外部t,f3中的t,f4中的t有各自的乙個t位址

其實我們可以看看,t在外部位址,內部f3地質 ,內部f4位址

![在這裡插入描述](

mfuz3pozw5na**pdgk,shadow_10,text_ahr0chm6ly9ibg9nlmnzzg4ubmv0l3fxxzizotiznzez,size_16,color_ffffff,t_70)

當然我們也可以按引用捕獲

//更一般的

t =100;

//按值捕獲

auto f5 =

[t]()-

>

int;

auto f6 =

[&t]()

->

int;

cout <

)<< endl;

//外部的t是沒有改變的

//捕獲列表

int m =1;

int n =2;

//外面的引數都是按值捕獲[=

]();

//外面的引數都是按引用捕獲[&

]();

hadoop 細節考察點

1.在hadoop 上執行乙個job,主要就是mr,而mr的優化就是主要的關鍵。從六個方面考慮 資料輸入 map階段 reduce階段 io傳輸 資料傾斜問題和常用的調優引數 inputformat combinetextinputformat作為輸入,解決大量小檔案場景.map階段 調整 io.s...

C 匿名函式

所謂匿名函式,其實類似於python中的lambda函式,其實就是沒有名字的函式。使用匿名函式,可以免去函式的宣告和定義。這樣匿名函式僅在呼叫函式的時候才會建立函式物件,而呼叫結束後立即釋放,所以匿名函式比非匿名函式更節省空間 c 中的匿名函式通常為 capture parameters retur...

C 匿名函式

匿名函式是乙個 內聯 語句或表示式,可在需要委託型別的任何地方使用。可以使用匿名函式來初始化命名委託,或傳遞命名委託 而不是命名委託型別 作為方法引數。c 中委託的發展 在 c 1.0 中,您通過使用在 中其他位置定義的方法顯式初始化委託來建立委託的例項。c 2.0 引入了匿名方法的概念,作為一種編...