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

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

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


值捕獲


先看如下代碼:


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


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


引用捕獲


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


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


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


隱式捕獲


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

當需要隱式值捕獲時,使用[=];

當需要隱式引用捕獲時,使用[&];

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


作者觀點


lambda表達式是個好東西,但也要理解才行。

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