精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++的匿名函數(lambda表達式)

開發 后端
C++11提供了對匿名函數的支持,稱為Lambda函數(也叫Lambda表達式). 它是定義和使用匿名函數對象的一種簡便的方式。

[[346604]]

 總述

C++11提供了對匿名函數的支持,稱為Lambda函數(也叫Lambda表達式). 它是定義和使用匿名函數對象的一種簡便的方式。匿名函數是我們需要用到的一個函數,但是又不想去費力命名一個函數的場景。我們無需為每個值或者每種類型)單獨編寫函數,更不必把值保存在讓人厭倦的全局變量中 。 利用lambda表達式可以編寫內嵌的匿名函數,用以替換獨立函數或者函數對象,并且使代碼更可讀。

工作的時候這個是比較常用的,通過匿名函數進行函數內部變量的捕獲,繼而進行操作變量等。那么現在就由我來給大家分享一下,我對Lambda表達式的認知,僅作為一個基礎的介紹哈,畢竟C++博大精深,吾輩還需要深究。

1.它的結構

一條lambda表達式一般會有以下部分:

1.一個可能為空的捕獲列表,指明定義環境中的那些名字能被用在lambda表達式內,以及這些名字的訪問形式拷貝還是引用,捕獲列表位于 [] 內。

2.一個可選的參數列表,指明lambda表達式所需的參數,參數列表位于 () 內。

3.一個可以選的mutable修飾符,指明該lambda表達式可能會修改它自身的狀態(即,改變通過值捕獲的變量的副本)

4.一個可選的 -> 形式的返回類型聲明

5.一個表達式體,指明要執行的代碼,表達式位于 {} 內。

  1. [捕獲列表](參數列表) mutable(可選) 異常屬性 -> 返回類型 { 
  2. // 函數體 

上面的語法規則除了 [捕獲列表] 內的東西外,其他部分都很好理解,只是一般函數的函數名被略去, 返回值使用了一個 -> 的形式進行。

所謂捕獲列表,其實可以理解為參數的一種類型,lambda 表達式內部函數體在默認情況下是不能夠使用函數體外部的變量的, 這時候捕獲列表可以起到傳遞外部數據的作用。

在lambda中,傳參、返回結果以及定義表達式體和普通的函數都是一致的,區別就在于普通函數沒有提供局部變量“捕獲”功能,而局部捕獲的功能,就意味著lambda可以做局部函數使用,而普通函數不能。

展示一個小例子證明lambda表達式的簡潔性:

Greater than 是一個函數對象,保存了要比較的值:

  1. struct Greater_than ( 
  2.   int val; 
  3.   Greater_than(lnt v) : val{v} { } 
  4.   bool operatorO(const pair<string.int>& r) { return r.second>val; 
  5. }; 

我們也可以使用 lambda 表達式 :

  1. auto p =find_if(m.beginO, m.endO, 
  2.  [](const pair<string, int>& r) { return r.second>42; });  

每當你定義一個lambda表達式后,編譯器會自動生成一個匿名類(這個類當然重載了()運算符),我們稱為閉包類型(closure type)。

2.基本的參數分析

C++11中的Lambda表達式捕獲外部變量主要有以下形式:

  • []:默認不捕獲任何變量;
  • [=]:默認以值捕獲所有變量;
  • [&]:默認以引用捕獲所有變量;
  • [x]:僅以值捕獲x,其它變量不捕獲;
  • [&x]:僅以引用捕獲x,其它變量不捕獲;
  • [=, &x]:默認以值捕獲所有變量,但是x是例外,通過引用捕獲;
  • [&, x]:默認以引用捕獲所有變量,但是x是例外,通過值捕獲;
  • [this]:通過引用捕獲當前對象(其實是復制指針);
  • [*this]:通過傳值方式捕獲當前對象;

在上面的捕獲方式中,注意最好不要使用[=]和[&]默認捕獲所有變量。首先說默認引用捕獲所有變量,你有很大可能會出現懸掛引用(Dangling references),因為引用捕獲不會延長引用的變量的聲明周期,例如一個形參傳進來我們進行捕獲并作為一個返回值執行。因為函數傳參進來之后,本函數不會保存該變量,函數執行完就會自動釋放,那么這個時候返回值就可能產生一個沒有意義的結果。

  1. auto evt_set_status_x = [&](EventType x) 
  2.   status[x] = true;/*通過引用捕獲的變量 我們可以進行修改變量的數據*/ 
  3. }; 

[&]是一個捕獲列表( capture l ist ), 它指明所用的局部名字(如 x) 將通過引用訪問 。如果我們希望只"捕獲 "x ,則可以寫成 [&x] ;如果希望給生成的函數對象傳遞一個 的拷貝, 則寫成[ x] 。什么也不捕獲是[],捕獲所有通過引用訪問的局部名字是[&],捕獲所有以值訪問的局部名字是[=] 。

并且lambda表達式也可以賦值給相對應的函數指針,這也使得你完全可以把lambda表達式看成對應函數類型的指針。

當我們需要訪問它的局部變量的時候,我們需要特別定義捕獲列表中的類型

下面是一個沒有使用局部變量的lambda表達式,所以它的[]里面為空

  1. void part(vector<int>& v) 
  2.     sort(v.begin,v.end);//排列值 
  3.  
  4.     sort(v.begin,v.end
  5.             [](int x,int y){return abs(x) < abs(y);});//排列絕對值 
  6.  

下面是一個使用局部變量的lambda表達式,所以它的[]里面為空就會出錯

  1. void part(vector<int>& v) 
  2.     bool value = true
  3.  
  4.     sort(v.begin,v.end
  5.             [](int x,int y){return  value ? x<y:abs(x) < abs(y);});/ 
  6.  

這時候就錯誤了,因為我們用到了value這個局部變量,而沒有進行捕獲列表的設置。

3.捕獲使用分析

使用 lambda 雖然簡單便捷,但也有可能顯得晦澀難懂 。

值捕獲

與參數傳值類似,值捕獲的前提是變量可以拷貝,不同之處則在于,被捕獲的變量在 lambda 表達式被創建時拷貝, 而非調用時才拷貝:

  1. #include <iostream> 
  2. void value_capture() { 
  3.     int value = 1; 
  4.     auto copy_value = [value] { 
  5.         return value; 
  6.     }; 
  7.     value = 100; 
  8.     auto stored_value = copy_value(); 
  9.     std::cout << "stored_value = " << stored_value << std::endl; 
  10.  
  11. int main(int argc,char ** argv) 
  12.   value_capture(); 
  13. // 這時, stored_value == 1, 而 value == 100. 
  14. // 因為 copy_value 在創建時就保存了一份 value 的拷貝 

記得編譯的時候加 -std=c++11

引用捕獲

與引用傳參類似,引用捕獲保存的是引用,值會發生變化:

  1. void reference_capture() { 
  2.     int value = 1; 
  3.     auto copy_value = [&value] { 
  4.         return value; 
  5.     }; 
  6.     value = 100; 
  7.     auto stored_value = copy_value(); 
  8.     std::cout << "stored_value = " << stored_value << std::endl; 
  9.     // 這時, stored_value == 100, value == 100. 
  10.     // 因為 copy_value 保存的是引用 

泛型lambda表達式

從C++14開始,lambda表達式支持泛型:其參數可以使用自動推斷類型的功能,而不需要顯示地聲明具體類型。這就如同函數模板一樣,參數要使用類型自動推斷功能,只需要將其類型指定為auto,類型推斷規則與函數模板一樣。就用我最早給出的那個例子好了。

  1. auto evt_set_status_x = [&](EventType x) 
  2.   status[x] = true
  3. }; 

本文轉載自微信公眾號「羽林君」,可以通過以下二維碼關注。轉載本文請聯系羽林君公眾號。

 

責任編輯:武曉燕 來源: 羽林君
相關推薦

2023-11-02 08:25:58

C++Lambda

2022-09-19 14:12:27

C++Lambda表達式

2021-08-31 07:19:41

Lambda表達式C#

2023-03-23 18:40:18

Lambda編程C++

2023-09-25 13:28:14

C++Lambda

2009-08-27 09:44:59

C# Lambda表達

2024-03-25 13:46:12

C#Lambda編程

2009-08-31 17:11:37

Lambda表達式

2009-07-09 09:51:07

Lambda表達式C#

2009-08-27 09:57:50

C# Lambda表達

2009-08-26 16:17:23

C# Lambda表達

2009-09-14 13:57:20

C# Lambda表達Lambda表達式

2012-06-26 10:03:58

JavaJava 8lambda

2009-07-01 09:56:10

C#3.0

2009-09-15 15:18:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2022-12-05 09:31:51

接口lambda表達式

2009-09-11 09:48:27

Linq Lambda

2009-08-10 10:06:10

.NET Lambda

2022-11-07 07:11:19

C#lambda函數
點贊
收藏

51CTO技術棧公眾號

欧美在线观看视频网站| 91在线精品观看| www在线观看免费视频| 69堂免费精品视频在线播放| 国产精品久久久久久久久免费桃花| 亚洲一区二区三区视频播放| 国产精品2020| 欧美先锋资源| 欧美精品一区二区久久久| 男人揉女人奶房视频60分 | 欧美风情第一页| 福利在线一区| 日韩欧美在线播放| 麻豆映画在线观看| 国产精品一级伦理| 国产suv精品一区二区6| 国产91精品最新在线播放| 97在线观看免费高| 久久综合欧美| 亚洲国产精品久久| 性欧美在线视频| 2022成人影院| 亚洲成人资源在线| 中文字幕欧美人与畜| 欧美精品久久久久久久久久丰满| 韩国成人在线视频| 国产精品99久久久久久www| 久草视频免费播放| 久久精品亚洲人成影院 | 国产黄片一区二区三区| www.亚洲一二| 日韩一区二区三区视频在线观看| 久久久久久久久久久免费视频| av片哪里在线观看| 国产精品区一区二区三| 欧美亚洲免费高清在线观看| 亚洲高清视频在线播放| 精品亚洲欧美一区| 国产精品一区二区三区成人| 国产极品美女高潮无套嗷嗷叫酒店| 国产精品x453.com| 中文字幕在线看视频国产欧美| 国产精品一级黄片| 欧美一区二区三区红桃小说| 精品国产一区二区亚洲人成毛片| 国产不卡的av| 国产精久久久| 91.麻豆视频| 五月天视频在线观看| 欧洲亚洲精品久久久久| 在线观看欧美黄色| 成人免费xxxxx在线视频| 暖暖成人免费视频| 色哟哟一区二区| 中文字幕永久视频| 777午夜精品电影免费看| 在线观看区一区二| 久久国产激情视频| 中文幕av一区二区三区佐山爱| 精品视频在线视频| 岛国毛片在线播放| 精品午夜av| 日韩精品专区在线影院重磅| 麻豆免费在线观看视频| 91大神精品| 亚洲国产高清高潮精品美女| 性色av蜜臀av浪潮av老女人| 另类尿喷潮videofree| 日韩精品中文字幕久久臀| 中文幕无线码中文字蜜桃| 国产精品最新| 日韩一区av在线| 欧美肥妇bbwbbw| 欧美+亚洲+精品+三区| 欧美激情三级免费| 在线观看国产亚洲| 日韩av网站免费在线| 国产综合久久久久久| 精品久久久久中文慕人妻| 不卡的av在线播放| 日本精品国语自产拍在线观看| yiren22综合网成人| 亚洲欧美综合另类在线卡通| 水蜜桃在线免费观看| 999福利在线视频| 91黄色免费网站| 国产欧美精品一二三| 国产精品xxxav免费视频| 亚洲男人第一av网站| 亚洲女人毛茸茸高潮| 在线高清一区| 国产精品成人免费电影| a天堂视频在线| 久久影视一区二区| 熟女视频一区二区三区| 波多野结衣中文字幕久久| 一本一道综合狠狠老| 久久精品亚洲天堂| 中国av一区| 超在线视频97| 亚洲黄色免费观看| 国产另类ts人妖一区二区| 久久精品美女| 在线网址91| 91成人免费网站| 无码人妻aⅴ一区二区三区玉蒲团| 偷拍视屏一区| 九九热这里只有在线精品视| 欧美性猛交xxxx乱大交hd| 国产精品亚洲人在线观看| 六月婷婷久久| 成人性生交大片免费看网站 | 国产精品亚洲lv粉色| 99久久精品免费看国产免费软件| 亚洲综合五月天| 亚洲精华液一区二区三区| 欧美一区二区三区四区五区| 丰满少妇高潮一区二区| 亚洲成人在线| 91视频99| 黄色在线免费| 欧美性大战xxxxx久久久| 欧亚乱熟女一区二区在线| 国产韩日影视精品| 国产精品美女网站| 你懂的在线观看| 天天综合日日夜夜精品| 久久久国产精品久久久| 青青草91久久久久久久久| 26uuu另类亚洲欧美日本老年| 午夜美女福利视频| 亚洲精品一二三| 亚洲图色中文字幕| 成人情趣视频网站| 国产97色在线|日韩| 天堂v视频永久在线播放| 亚洲午夜一二三区视频| 男插女视频网站| 999国产精品永久免费视频app| 亲爱的老师9免费观看全集电视剧| 亚洲国产福利视频| 亚洲综合成人网| 欧美69精品久久久久久不卡| 91精品99| 亚洲最大av在线| 成码无人av片在线观看网站| 欧美久久一二区| 亚洲女人毛茸茸高潮| 看国产成人h片视频| 亚洲欧美综合一区| 日韩城人网站| 久久成人亚洲精品| 国产ts人妖调教重口男| 亚洲人成网站精品片在线观看| 午夜久久福利视频| 68国产成人综合久久精品| 成人一区二区电影| 青草在线视频| 亚洲国产古装精品网站| 五月婷婷视频在线| 久久久www成人免费毛片麻豆| 免费国产a级片| 嫩草一区二区三区| 国产精品扒开腿爽爽爽视频| 在线免费看a| 日韩午夜激情免费电影| 久一区二区三区| 91在线云播放| 超碰在线播放91| 五月天激情综合网| 国产精品毛片va一区二区三区| h片在线观看视频免费| 精品中文视频在线| 中文字幕 欧美激情| 亚洲欧美偷拍卡通变态| 性猛交╳xxx乱大交| 9色国产精品| 日韩视频在线观看国产| 高清一区二区三区av| 久久久久久尹人网香蕉| 第九色区av在线| 欧美一三区三区四区免费在线看 | 成全电影播放在线观看国语| 欧美精品自拍偷拍动漫精品| 久久久久97国产| 久久新电视剧免费观看| 特黄视频免费观看| 日韩视频在线一区二区三区 | 都市激情国产精品| 色av中文字幕一区| 日本高清视频www| 欧美三级三级三级爽爽爽| 黄色一级片在线| 日本一区二区动态图| 国产精品日日摸夜夜爽| 久久一区中文字幕| 黄色成人在线免费观看| 欧美美女在线观看| 国产精品久久九九| 国产91欧美| 77777少妇光屁股久久一区| av在线免费播放网站| 精品sm捆绑视频| 亚洲一二区视频| 欧美性猛交99久久久久99按摩| 一级性生活免费视频| 久久新电视剧免费观看| 国产xxx在线观看| 美女网站色91| jizzjizzxxxx| 亚洲无吗在线| 最新不卡av| 精品国产一区二区三区噜噜噜| 国产精品v欧美精品v日韩精品 | 99av国产精品欲麻豆| 亚洲黄色成人久久久| 婷婷精品在线观看| 国产伦精品一区二区三区四区视频 | 欧美一区二区三区免费在线看| 一区视频免费观看| 国产拍欧美日韩视频二区 | 国产精品你懂的在线| 风间由美一二三区av片| 国产不卡一区视频| www.成年人| 麻豆高清免费国产一区| 日本www高清视频| 国产精品美女久久久| 成人av在线不卡| 欧美激情自拍| 在线观看成人免费| 亚洲精品国产偷自在线观看| 亚洲国产精品久久久久婷婷老年| 亚洲精品无吗| 久久久久久久久久久一区| 国产精品白浆| 精品欧美日韩在线| 久草精品视频| 精品日产一区2区三区黄免费 | 日韩女优av电影在线观看| 一区二区三区免费观看视频| 欧美午夜一区二区三区| 神马久久久久久久| 色婷婷国产精品| 男人天堂2024| 日本韩国欧美国产| 波多野结衣爱爱| 欧美在线短视频| 在线观看国产黄| 欧美日韩国产色站一区二区三区| 中国a一片一级一片| 欧美中文字幕不卡| 中文字幕一二三四| 欧美另类高清zo欧美| 国产精品欧美久久久久天天影视| 欧美福利电影网| 国产黄色av片| 亚洲黄在线观看| 手机看片福利在线观看| 亚洲亚裔videos黑人hd| 成人免费一区二区三区视频网站| 最近2019年中文视频免费在线观看| avtt亚洲| 色综合久久88色综合天天看泰| 久草在线视频资源| 欧美亚洲视频一区二区| 一呦二呦三呦精品国产| 国产这里只有精品| 亚洲国产aⅴ精品一区二区| 好吊色欧美一区二区三区四区 | 一区二区精品在线观看| 中文字幕一区二区av | 日本一区免费看| 性xxxx欧美老肥妇牲乱| 色欲色香天天天综合网www| 免费日韩一区二区| 手机av在线免费| 成人性色生活片| 国产免费一区二区三区网站免费| 国产精品欧美一区二区三区| 欧美日韩精品一区二区三区视频播放| 亚洲成人av一区二区三区| 久久影视中文字幕| 欧美成人官网二区| 看电影就来5566av视频在线播放| 日韩一区二区三区国产| 超碰激情在线| 91亚洲va在线va天堂va国| 欧美aaaaaaaa牛牛影院| 亚洲精品国产一区| 亚洲精品日本| caoporm在线视频| 95精品视频在线| 免费三级在线观看| 日韩欧美国产网站| 国产哺乳奶水91在线播放| 亚洲精品日韩久久久| 黄av在线播放| 国产精品678| 国产精品久久久久av蜜臀| 午夜精品一区二区在线观看 | 欧美一性一乱一交一视频| 欧美一区=区三区| 欧美精品亚洲精品| 一区三区视频| 可以看污的网站| 国产性色一区二区| 日韩高清免费av| 日韩一区二区在线免费观看| 国产黄色片在线观看| 久久久久亚洲精品成人网小说| 免费成人毛片| 久久久久国产精品视频| 欧美日韩国产亚洲一区| 亚洲另类第一页| 欧美激情一区在线观看| 精品成人久久久| 欧美mv日韩mv| 超碰在线网址| 成人国产精品色哟哟| 国产精品免费不| 久久久久狠狠高潮亚洲精品| 成人免费看视频| 九九视频免费在线观看| 91精品国产品国语在线不卡| 国产福利小视频在线观看| 欧美性做爰毛片| 欧美在线关看| www.99热这里只有精品| 成人一区在线观看| 免费无码毛片一区二区app| 在线播放中文字幕一区| 午夜视频在线看| 国产男女猛烈无遮挡91| 久久一区二区三区电影| 在线免费观看视频黄| 国产偷国产偷亚洲高清人白洁| 国产无套丰满白嫩对白| 精品亚洲夜色av98在线观看| 岛国av在线播放| 久久伊人一区| 六月丁香综合| 国产肥白大熟妇bbbb视频| 色综合天天做天天爱| 国产最新视频在线观看| 国产91精品网站| 成人免费av| www.com黄色片| 18欧美亚洲精品| 国产浮力第一页| 欧美国产视频一区二区| a级日韩大片| 成人av一级片| 国产亚洲成aⅴ人片在线观看| 国产亚洲欧美日韩高清| 中文字幕在线精品| 久久丁香四色| 无码 制服 丝袜 国产 另类| av在线这里只有精品| 在线观看免费av片| 中文字幕国内精品| 欧美日韩中出| 人妻少妇精品无码专区二区| 91天堂素人约啪| 一区二区乱子伦在线播放| 久久久av一区| 国产精品毛片av| 亚洲视频在线a| ㊣最新国产の精品bt伙计久久| 亚洲精品久久久蜜桃动漫 | 色偷偷偷综合中文字幕;dd| 99re8精品视频在线观看| 99er在线视频| 国产亚洲一区字幕| 中文区中文字幕免费看| 蜜臀久久99精品久久久久久宅男| 一区二区三区四区精品视频| 欧美网站免费观看| 欧美国产一区视频在线观看| 国产情侣激情自拍| 91av成人在线| 91精品久久久久久久久久不卡| 性高潮免费视频| 色狠狠色狠狠综合| 成人免费观看视频大全| 久久大香伊蕉在人线观看热2| 男女激情视频一区| 麻豆chinese极品少妇| 亚洲天堂精品在线| 日韩一区二区三区高清在线观看| 欧美日韩亚洲一| 亚洲欧美日韩一区| 黄色免费在线播放| 国产精品日韩一区二区| 美女在线视频一区| 中文字幕超碰在线| 欧美日韩国产成人| 久久精品高清| 中文人妻一区二区三区| 日韩一区二区三区高清免费看看|