日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]可以認(rèn)為lambda表達(dá)式取得信息有兩種方式,或者說兩個(gè)時(shí)機(jī):一個(gè)是參數(shù)列表,其內(nèi)容是在表達(dá)式被調(diào)用時(shí)決定;另一個(gè)捕獲列表,其內(nèi)容是在是表達(dá)式被創(chuàng)建的時(shí)候決定,本文討論捕獲列表。值捕獲先看如下代碼:i

可以認(rèn)為lambda表達(dá)式取得信息有兩種方式,或者說兩個(gè)時(shí)機(jī):一個(gè)是參數(shù)列表,其內(nèi)容是在表達(dá)式被調(diào)用時(shí)決定;另一個(gè)捕獲列表,其內(nèi)容是在是表達(dá)式被創(chuàng)建的時(shí)候決定,本文討論捕獲列表。


值捕獲


先看如下代碼:


int?factor?=?2;
auto?multiply?=?[factor](int?value)
????????????????{return?factor?*?value;};
factor?=?4;
cout?<<?multiply(2)?<<?endl;


代碼中首先為factor賦值2,創(chuàng)建lambda表達(dá)式以后,再次賦值4。由于lambda表達(dá)式的捕獲是在該表達(dá)式創(chuàng)建是進(jìn)行的,而第二次賦值在lambda表達(dá)式創(chuàng)建之后,所以muliply(2)的執(zhí)行結(jié)果為4。


引用捕獲


還是這段代碼,只要在捕獲列表中變量的前面多了一個(gè)&,就變成了引用捕獲。


int?factor?=?2;
auto?multiply?=?[&factor](int?value)
????????????????{return?factor?*?value;};
factor?=?4;
cout?<<?multiply(2)?<<?endl;


捕獲的時(shí)機(jī)并沒有變化,只是捕獲的是factor的引用而不是factor的值,所以定義lambda之后,對(duì)factor再次賦值4依然會(huì)影響multiply(2)的結(jié)果。此時(shí)的輸出為8。


隱式捕獲


前面例子中使用捕獲列表時(shí),具體指定了變量名,屬于顯式捕獲。另外還有隱式捕獲,由lambda表達(dá)式推斷需要捕獲的變量。具體方法是:

當(dāng)需要隱式值捕獲時(shí),使用[=];

當(dāng)需要隱式引用捕獲時(shí),使用[&];

在上面例子中使用隱式捕獲以后,結(jié)果不會(huì)發(fā)生變化。


作者觀點(diǎn)


lambda表達(dá)式是個(gè)好東西,但也要理解才行。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉