欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++11新引入的lambda表達(dá)式怎么用-創(chuàng)新互聯(lián)

本篇文章為大家展示了C++11新引入的lambda表達(dá)式怎么用,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

為二七等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及二七網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、二七網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

ISO C++ 11 標(biāo)準(zhǔn)的一大亮點(diǎn)是引入Lambda表達(dá)式。基本語法如下:

[capture list] (parameter list) ->return type { function body }

簡(jiǎn)單的講一下各個(gè)部分的作用

1.[capture list]捕獲列表,捕獲到函數(shù)體中,使得函數(shù)體可以訪問
2.(parameter list)參數(shù)列表,用來表示lambda表達(dá)式的參數(shù)列表
3.->return type函數(shù)返回值 {function body}就是函數(shù)體

lambda表達(dá)式可以理解為一個(gè)匿名函數(shù)(但本質(zhì)并不是),如果要使用lambda表達(dá)式聲明的函數(shù),需要給他“命名”

lambda表達(dá)式可以表示閉包,因?yàn)楸旧砭褪沁@個(gè)類
閉包是指可以包含自由變量的代碼塊 (未綁定到特定的對(duì)象:舉個(gè)栗子std::function就可以產(chǎn)生一個(gè)對(duì)象,或者一個(gè)未指向任何函數(shù)的函數(shù)指針)

閉包講的通俗一些有以下幾點(diǎn)

1.自帶上下文的函數(shù),閉包可以儲(chǔ)存運(yùn)行時(shí)需要的上下文,這樣就可以在上下文不存在的時(shí)候還可以使用閉包(變量a生命周期到了被銷毀,但是在閉包中還可以拿來用)
2.可以把閉包看成一個(gè)重載了operator()的類,帶有狀態(tài)的意思就可以解釋成通過this指針使用成員變量
3.capture list就是lambda表達(dá)式實(shí)現(xiàn)閉包的方式

簡(jiǎn)單使用的例子

--------------------------------------------------------------------------------

C++11為auto提供了新的功能,如他的名字一般,現(xiàn)在可以看成自動(dòng)適應(yīng)類型,可以適應(yīng)多數(shù)類型
使用auto來代替變量的類型,前提是被明確類型的初始化變量初始化的,可以使用auto關(guān)鍵字

 auto f = [](){}; 
 auto f = [](int a, int b)->int {return a + b; };
 f(1, 2);//需要這么使用

只要是函數(shù)類型就都可以使用這個(gè)lambda表達(dá)式

 typedef int(*FUNC)(int a, int b);
 int main()
 {
   FUNC a= [](int a, int b) {return a + b; };
  
   printf("%d\n", a(1, 2));
 }

聲明函數(shù)的方法都可以接收不帶捕獲列表的lambda表達(dá)式

 typedef std::function<int(int a, int b)> FUNC;
 int main()
 {
   FUNC a= [](int a, int b) {return a + b; };
  
   printf("%d\n", a(1, 2));
 }

--------------------------------------------------------------------------------

lambda表達(dá)式中capture list的用法

 int func(int a, int b, std::function<int(int, int)> f)
 {
   return f(a, b);
 }
 
 
 int a=1;
 int b=2;
 int c=3;
 int d = func(a, b, [a, &b](int m, int n) {
 
     printf("a = %d\n", a); // a是通過值傳遞捕獲,mutable只在函數(shù)體內(nèi)修改有效
     printf("b = %d\n", b); // b是引用傳遞捕獲,mutable可以對(duì)外部b造成影響
 
                //printf("c = %d\n", c); // c不可訪問
 
     return m + n;
   });
 typedef int(*FUNC)(int m, int n,std::function<int(int ,int )> f);
 
 void test()
 {
   FUNC oho;
   int a = 10;
   int b = 20;
   auto func = [&a, &b](int m, int n) {printf("a:%d b:%d\n", a, b); return m + n; };
   
 }

1.[]空。沒有使用任何函數(shù)對(duì)象參數(shù)。
2.[=]。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見的局部變量(包括Lambda所在類的this),并且是值傳遞方式(相當(dāng)于編譯器自動(dòng)為我們按值傳遞了所有局部變量)。
3.[&]。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見的局部變量(包括Lambda所在類的this),并且是引用傳遞方式(相當(dāng)于編譯器自動(dòng)為我們按引用傳遞了所有局部變量)。
4.[this]。函數(shù)體內(nèi)可以使用Lambda所在類中的成員變量。
5.[a]。將a按值進(jìn)行傳遞。按值進(jìn)行傳遞時(shí),函數(shù)體內(nèi)不能修改傳遞進(jìn)來的a的拷貝,因?yàn)槟J(rèn)情況下函數(shù)是const的。要修改傳遞進(jìn)來的a的拷貝,可以添加mutable修飾符。
6.[&a]。將a按引用進(jìn)行傳遞。
7.[a, &b]。將a按值進(jìn)行傳遞,b按引用進(jìn)行傳遞。
8.[=,&a, &b]。除a和b按引用進(jìn)行傳遞外,其他參數(shù)都按值進(jìn)行傳遞。注意=符號(hào)的位置必須在頭一個(gè)
9.[&, a, b]。除a和b按值進(jìn)行傳遞外,其他參數(shù)都按引用進(jìn)行傳遞。&符號(hào)的位置必須在頭一個(gè)

當(dāng)你想改變通過傳值方式捕捉的變量的時(shí)候就要添加mutable

[a, &b, &b2](int m, int n)mutable {a *= 2; return m*n; }:

--------------------------------------------------------------------------------

lambda表達(dá)式的其他用法

 class A
 {
 public:
   A();
   ~A();
   void test()
   {
     auto f = [this](int m, int n) {printf("%d\n", a); };
   }
     
 private:
   int a;
 };

lambda表達(dá)式本質(zhì)是一種閉包類型,雖然他可以賦值給函數(shù)指針,但是只限于在捕獲列表為空的時(shí)候,當(dāng)捕獲列表有值的時(shí)候,應(yīng)該使用auto來接收lambda表達(dá)式,或者用std::function也是可以的

main::__l2::<lambda_eb7b0a89c14bee3d2620c108ffb635c6>
 //這是一個(gè)lambda表達(dá)式在VS2015環(huán)境下顯示的類型,不用auto用什么來接收調(diào)用他呢?

本質(zhì)來說lambda表達(dá)式之間是不允許賦值的

 auto a = [](int m, int n) {return m + n; };
 auto b = [](int m, int n) {return m - n; };
 a = b;

操作非法,因?yàn)殚]包類型不允許使用賦值操作符,但是函數(shù)指針可以,也就是可以有下面的操作

 typedef int(*FUNC)(int a, int b);
 int main()
 {
   FUNC a = [](int a, int b) {return a + b; };
   FUNC b = [](int a, int b) {return a + b; };
   a = b;
   return 0;
 }

std::function之間也是可以賦值的,他就可以辦到有capture list的lambda表達(dá)式進(jìn)行賦值

 typedef std::function<int(int,int)> FUNC;
 int m = 10;
 int n = 20;
 FUNC a = [m, n](int a, int b){printf("%d\n", m); return a + b; };
 FUNC b = [m, n](int a, int b){return a + b; };
 b = a;
 b(1, 2);
 //執(zhí)行結(jié)果是可以把m打印出來的

上述內(nèi)容就是C++11新引入的lambda表達(dá)式怎么用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:C++11新引入的lambda表達(dá)式怎么用-創(chuàng)新互聯(lián)
標(biāo)題URL:http://aaarwkj.com/article40/cogjho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、App設(shè)計(jì)、品牌網(wǎng)站建設(shè)定制網(wǎng)站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
国产性生活大片免费看| 欧美在线观看日韩精品| 在线观看免费国产b片| 色呦呦一区二区三区视频| 久久精品国产亚洲av麻豆网站| 人妻一区二区免费视频| 成人在线观看一区二区三区| 中文字幕日日夜夜av| 黑人巨大一区二区三区| 国产亚洲美女在线视频视频| 国产污视频网站在线观看| 亚洲成av人天堂影院| 中文一级伦理一区二区| 手机蜜臀av在线播放| 91中文字幕国产日韩| 91精品日日躁夜夜躁欧美| 手机蜜臀av在线播放| 99国产精品欲av麻豆在线观看| 亚洲欧美日韩精品二区| 国产传媒网站在线观看| 国产伦人偷精品免费视频| 国产伦理免费精品中文字幕| 蜜臀av一区二区三区人妻| 日本精品中文字幕人妻| 久久这里有精品免费观看| 日韩在线视频 一区二区三区| 在线观看后入大屁股| 亚洲精品成人一区不卡| 日本黄色大波少妇网站| 黄色国产欧美国产亚洲| 少妇高潮试看二十分钟| 日本啪啪精品一区二区三区| 欧美成人精品视频在线不卡| 亚洲一区二区精品免费视频| 四虎在线观看最新入口| 午夜视频在线观看91| 国产三级精品正在播放| 国产精品白丝一区二区三区| 黄色av手机在线观看| 日本成人午夜在线观看| 加勒比久草免费在线观看|