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

遇見C++ Lambda

開發(fā) 開發(fā)工具
假設(shè)我們有一個vector<int>容器,想用100以內(nèi)的隨機數(shù)初始化它,其中一個辦法是通過generate函數(shù)生成,如代碼1所示。 generate函數(shù)接受三個參數(shù),前兩個參數(shù)指定容器的起止位置,后一個參數(shù)指定生成邏輯,這個邏輯正是通過Lambda來表達的。

生成隨機數(shù)字

假設(shè)我們有一個vector<int>容器,想用100以內(nèi)的隨機數(shù)初始化它,其中一個辦法是通過generate函數(shù)生成,如代碼1所示。 generate函數(shù)接受三個參數(shù),前兩個參數(shù)指定容器的起止位置,后一個參數(shù)指定生成邏輯,這個邏輯正是通過Lambda來表達的。

代碼 1

我們現(xiàn)在看到Lambda是最簡形式,只包含捕獲子句和函數(shù)體兩個必要部分,其他部分都省略了。[]是Lambda的捕獲子句,也是引出Lambda的語法,當(dāng)編譯器看到這個符號時,就知道我們在寫一個Lambda了。函數(shù)體通過{} 包圍起來,里面的代碼和一個普通函數(shù)的函數(shù)體沒有什么不同。

那么,代碼1生成的隨機數(shù)字里有多少個奇數(shù)呢,我們可以通過for_each函數(shù)數(shù)一下,如代碼3所示。和generate函數(shù)不同的是,for_each函數(shù)要求我們提供的Lambda接受一個參數(shù)。一般情況下,如果Lambda的參數(shù)列表不包含任何參數(shù),我們可以把它省略,就像代碼 1所示的那樣;如果包含多個參數(shù),可以通過逗號分隔,如(int index, std::string item)。

代碼 2

看到這里,細心的讀者可能已經(jīng)發(fā)現(xiàn)代碼2的捕獲子句里面多了一個"&odd_count",這是用來干嘛的呢?我們知道,這個代碼的關(guān)鍵部分是在 Lambda的函數(shù)體里修改一個外部的計數(shù)變量,常見的語言(如C#)會自動為Lambda捕獲當(dāng)前上下文的所有變量,但C++要求我們在Lambda的捕獲子句里顯式指定想要捕獲的變量,否則無法在函數(shù)體里使用這些變量。如果捕獲子句里面什么都不寫,像代碼1所示的那樣,編譯器會認為我們不需要捕獲任何變量。

除了顯式指定想要捕獲的變量,C++還要求我們指定這些變量的傳遞方式,可以選擇的傳遞方式有兩種:按值傳遞和按引用傳遞。像 [&odd_count] 這種寫法是按引用傳遞,這種傳遞方式使得你可以在Lambda的函數(shù)體里對odd_count變量進行修改。相對的,如果變量名字前面沒有加上"&"就是按值傳遞,這些變量在Lambda的函數(shù)體里是只讀的。

如果你希望按引用傳遞捕獲當(dāng)前上下文的所有變量,可以把捕獲子句寫成[&];如果你希望按值傳遞捕獲當(dāng)前上下文的所有變量,可以把捕獲子句寫成 [=]。如果你希望把按引用傳遞設(shè)為默認的傳遞方式,同時指定個別變量按值傳遞,可以把捕獲子句寫成[&, a, b];同理;如果默認的傳遞方式是按值傳遞,個別變量按引用傳遞,可以把捕獲子句寫成[=, &a, &b]。值得提醒的是,像[&, a, &b]和[=, &a, b]這些寫法是無效的,因為默認的傳遞方式均已覆蓋b變量,無需單獨指定,有效的寫法應(yīng)該是[&, a]和[=, &a]。

生成等差數(shù)列

現(xiàn)在我們把一開始的問題改一下,通過generate函數(shù)生成一個首項為0,公差為2的等差數(shù)列。有了前面關(guān)于捕獲子句的知識,我們很容易想到代碼3這個方案,首先按引用傳遞捕獲i變量,然后在Lambda的函數(shù)體里修改它的值,并返回給generate函數(shù)。

代碼 3

如果我們把i變量的傳遞方式改成按值傳遞,然后在捕獲子句后面加上mutable聲明,如代碼4所示,我們可以得到相同的效果,我指的是輸出結(jié)果。那么,這兩個方案有什么不一樣呢?調(diào)用generate函數(shù)之后檢查一下i變量的值就會找到答案了。需要說明的是,如果我們加上mutable聲明,參數(shù)列表就不能省略了,即使里面沒有包含任何參數(shù)。

代碼 4

使用代碼3這個方案,i變量的值在調(diào)用generate函數(shù)之后是18,而使用代碼4這個方案,i變量的值是-2。這個意味著mutable聲明使得我們可以在Lambda的函數(shù)體修改按值傳遞的變量,但這些修改對Lambda以外的世界是不可見的,有趣的是,這些修改在Lambda的多次調(diào)用之間是共享的。換句話說,代碼4的generate函數(shù)調(diào)用了10次Lambda,前一次調(diào)用時對i變量的修改結(jié)果可以在后一次調(diào)用時訪問得到。

這聽起來就像有個對象,i變量是它的成員字段,而Lambda則是它的成員函數(shù),事實上,Lambda是函數(shù)對象(Function Object)的語法糖,代碼4的Lambda最終會被轉(zhuǎn)換成代碼5所示的Functor類。

代碼 5

你也可以把代碼4的Lambda替換成Functor類,如代碼6所示。

代碼 6

如何聲明Lambda的類型?

到目前為止,我們都是把Lambda作為參數(shù)直接傳給函數(shù)的,如果我們想把一個Lambda傳給多個函數(shù),或者把它當(dāng)作一個函數(shù)多次調(diào)用,那么就得考慮把它存到一個變量里了,問題是這個變量應(yīng)該如何聲明呢?如果你確實不知道,也不想知道,那么最簡單的辦法就是交給編譯器處理,如代碼7所示,這里的auto 關(guān)鍵字相當(dāng)于C#的var,編譯器會根據(jù)我們用來初始化f1變量的值推斷它的實際類型,這個過程是靜態(tài)的,在編譯時完成。

代碼 7

如果我們想定義一個接受代碼7的Lambda作為參數(shù)的函數(shù),那么這個參數(shù)的類型又該如何寫呢?我們可以把它聲明為function模板類型,如代碼8所示,里面的類型參數(shù)反映了Lambda的簽名——兩個int參數(shù),一個int返回值。

代碼 8

此外,你也可以把這個函數(shù)聲明為模板函數(shù),如代碼9所示。

代碼 9

無論你如何聲明這個函數(shù),調(diào)用的時候都是一樣的,而且它們都能接受Lambda或者函數(shù)對象作為參數(shù),如代碼10所示。

代碼 10

捕獲變量的值什么時候確定?

現(xiàn)在,我要把代碼7的Lambda調(diào)整成代碼11所示的那樣,通過捕獲子句而不是參數(shù)列表提供輸入,這兩個參數(shù)分別使用不同的傳遞方式,那么,我在第三行修改這兩個參數(shù)的值會否對第四行的調(diào)用產(chǎn)生影響?

代碼 11

如果你運行代碼11,你將會看到輸出結(jié)果是5。為什么?這是因為按值傳遞在聲明Lambda的那一刻就已經(jīng)確定變量的值了,無論之后外面怎么修改,里面只能訪問到聲明時傳過來的版本;而按引用傳遞則剛好相反,里面和外面看到的是同一個東西,因此在調(diào)用Lambda之前外面的任何修改對里面都是可見的。這種問題在C#里是沒有的,因為C#只有按引用傳遞這種方式。

返回值的類型什么時候可以省略?

最后,我們一直沒有提到返回值的類型,編譯器會一直幫我們自動推斷嗎?不會,只有兩種情況可以在聲明Lambda時省略返回值類型,而前面的例子剛好都滿足這兩種情況,因此推到現(xiàn)在才說:

  • 函數(shù)體只包含一條返回語句,如最初的代碼1所示。
  • Lambda沒有返回值,如代碼2所示。

當(dāng)你需要加上返回值的類型時,必須把它放在參數(shù)列表后面,并且在返回值類型前面加上"->"符號,如代碼12所示。

代碼 12

*以上代碼均在Visual Studio 2010和Visual Studio 2012 RC上測試通過。

原文鏈接:http://www.cnblogs.com/allenlooplee/archive/2012/07/03/2574119.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2022-02-14 11:25:53

C++lambda函數(shù)

2023-11-02 08:25:58

C++Lambda

2020-10-16 06:40:25

C++匿名函數(shù)

2022-09-19 14:12:27

C++Lambda表達式

2009-04-14 14:53:06

C++Lambda函數(shù)多線程

2010-02-02 13:15:00

C++ lambda函

2023-09-25 13:28:14

C++Lambda

2023-03-23 18:40:18

Lambda編程C++

2025-04-30 10:10:00

在 C++C++11Lambda

2011-07-14 17:45:06

CC++

2009-09-14 13:44:14

Lambda ExprC# Lambda

2010-01-21 14:07:14

CC++聲明

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2010-01-28 13:45:06

C++數(shù)組

2011-07-15 00:47:13

C++多態(tài)

2010-01-26 15:51:06

C++變量

2024-12-24 12:10:00

代碼C++Lambda

2010-01-28 16:31:54

C++類型

2011-07-10 15:26:54

C++
點贊
收藏

51CTO技術(shù)棧公眾號

精品免费国产| 久久久亚洲网站| 午夜精品久久久久久久99热影院| 久久精品视频免费看| 国产高清亚洲一区| 欧美一区二区影院| 日韩福利小视频| 欧美黑人做爰爽爽爽| 欧美视频一区二区三区四区| 欧美 亚洲 视频| 国产亚洲依依| 福利电影一区二区| 国产精品久久久久久久午夜| 久久免费播放视频| 日韩久久精品网| 亚洲激情免费观看| 欧美成人手机在线视频| 中文字幕人成乱码在线观看 | 亚洲一区二区久久久久久| 日韩污视频在线观看| 欧美a级成人淫片免费看| 精品国产一区二区在线观看| 男女视频在线看| 国产精品一二三产区| 国产精品黄色在线观看| 久久综合九色欧美狠狠| 精品国产区一区二| 久久爱另类一区二区小说| 欧美中文字幕视频| 久久综合成人网| 国产精品久久久久久久久久10秀 | 日本久久精品电影| 久久久性生活视频| 亚洲91av| 亚洲免费观看高清完整版在线| 欧洲久久久久久| 天天干免费视频| 成熟亚洲日本毛茸茸凸凹| 91天堂在线视频| 中文字幕你懂的| 日韩精品一区第一页| 午夜精品久久久久久99热软件| 男人的天堂久久久| 羞羞答答成人影院www| 色av吧综合网| 蜜桃av免费观看| 美女av免费观看| wwwav网站| 国产一区在线视频| 91香蕉电影院| 国产特级黄色片| 精品一区二区久久| 成人啪啪免费看| 国产精品自产拍| 国产在线一区观看| 91亚洲永久免费精品| 国产精品免费无遮挡| 久久综合综合久久综合| 91久久精品国产| 国产口爆吞精一区二区| 国产麻豆精品久久一二三| 999国内精品视频在线| 国产黄色片免费观看| 国产精品18久久久久久久久久久久 | 九九九视频在线观看| 精品毛片免费观看| 日日狠狠久久偷偷四色综合免费| 任我爽在线视频| 亚洲欧美偷拍自拍| 欧美大片在线看免费观看| 国产污片在线观看| 美女被久久久| 国产女人18毛片水18精品| 国产色在线视频| 成人黄页毛片网站| 欧美激情视频一区二区三区| 黄色在线小视频| 国产精品剧情在线亚洲| 日韩精品久久一区二区| 自拍偷拍亚洲视频| 欧美巨大另类极品videosbest | 久久综合国产精品| 亚洲精品在线观看免费| a级毛片免费观看在线| 亚洲高清不卡在线| 欧在线一二三四区| 国产区一区二| 亚洲欧美综合精品久久成人| 午夜成人亚洲理伦片在线观看| 欧美精品网站| 日本一区二区三区在线播放| 在线观看国产精品入口男同| 国产99一区视频免费| 欧美另类一区| 中文字幕在线播放网址| 激情懂色av一区av二区av| 中文字幕有码av| 91麻豆精品激情在线观看最新| 日韩精品免费在线视频| 日韩一卡二卡在线观看| 亚洲国产日韩在线| 91精品国产综合久久香蕉| 人妻va精品va欧美va| 国产精品欧美一区二区三区| av动漫在线免费观看| 国产成人精品一区二三区在线观看 | 7777kkkk成人观看| 国产伦精品一区二区三区视频痴汉| www.日本不卡| 中文字幕精品—区二区日日骚| 高清在线视频不卡| 欧美精品久久天天躁| 国产精品无码午夜福利| 亚洲午夜电影| 91手机视频在线观看| 岛国在线视频免费看| 精品久久香蕉国产线看观看亚洲 | 亚洲精品一区二三区| 成人激情小说乱人伦| 一区二区三区四区久久| 三上悠亚亚洲一区| 亚洲精品xxxx| 免费网站看av| 国产精品影视网| 亚洲视频电影| abab456成人免费网址| 亚洲精品国产suv| 黄色小视频在线免费看| 国产福利91精品一区二区三区| 亚洲日本欧美在线| 国精产品一区一区三区四川| 日韩精品视频中文在线观看| 国产一级二级三级视频| 久久99国产精品免费网站| 日韩免费三级| 日韩三级影视| 亚洲视频网站在线观看| 男人日女人网站| www精品美女久久久tv| 成年人看的毛片| 在线日韩成人| 久久久久久久久久国产| 亚洲国产精彩视频| 夜夜亚洲天天久久| 中文字幕在线观看91| 欧美久久成人| 国产精品久久久久免费| 欧美videos另类精品| 精品少妇一区二区三区日产乱码| 青娱乐av在线| 成人av电影在线网| 亚洲美免无码中文字幕在线| 精品国产影院| 51午夜精品视频| 你懂的视频在线播放| 色综合久久99| 日本理论中文字幕| 免费在线观看成人| 日韩不卡一二区| 亚洲精品一区二区三区中文字幕 | 日韩三级视频在线播放| 99精品黄色片免费大全| 一本色道无码道dvd在线观看| 欧洲福利电影| 91在线精品播放| 黄页网站在线| 精品视频在线播放免| 精品久久久久久久久久久久久久久久久久| 国产亚洲一本大道中文在线| 免费看污污网站| 天天射—综合中文网| 4444kk亚洲人成电影在线| 都市激情久久综合| 亚洲欧美制服中文字幕| 91国产免费视频| 亚洲午夜免费电影| 丰满少妇高潮一区二区| 麻豆成人av在线| 国产美女永久无遮挡| 日本国产精品| 国产精品一区二区久久国产| 毛片在线网址| 亚洲视频在线观看视频| 日本欧美三级| 亚洲精品大尺度| 中日精品一色哟哟| 亚洲资源中文字幕| mm131丰满少妇人体欣赏图| 久久国产精品99久久人人澡| 亚洲爆乳无码精品aaa片蜜桃| 日韩理论电影中文字幕| 国产在线拍偷自揄拍精品| 啦啦啦中文在线观看日本| 亚洲美女动态图120秒| 中文字幕观看在线| 午夜欧美视频在线观看| аⅴ天堂中文在线网| 成人看片黄a免费看在线| 啊啊啊国产视频| 午夜精品婷婷| 亚洲美女网站18| 果冻天美麻豆一区二区国产| 国产精品一区二区性色av| 天堂av最新在线| 色伦专区97中文字幕| 亚洲欧美自偷自拍| 日韩欧美色综合网站| 欧美在线视频精品| 午夜影院久久久| 国产精品suv一区二区88| 91啦中文在线观看| www.黄色网| 看片的网站亚洲| 无码日韩人妻精品久久蜜桃| 亚洲视频日本| 黄色网络在线观看| 青青草国产成人a∨下载安卓| 精品国产一区二区三区四区精华 | 亚洲七七久久综合桃花剧情介绍| 亚洲人线精品午夜| 视频一区 中文字幕| 欧美一区二区福利视频| 国产精品午夜一区二区| 欧美午夜激情在线| 国产午夜福利一区二区| 亚洲精品久久7777| 三级黄色在线观看| 国产精品国产三级国产三级人妇| 成人网站免费观看| 99综合电影在线视频| 永久看看免费大片| 国产一区二区在线电影| 第四色婷婷基地| 日本亚洲天堂网| 国产又黄又猛视频| 老司机一区二区三区| 欧美黄色免费影院| 国产亚洲欧洲| 免费在线观看的av网站| 国产精品久久久久毛片大屁完整版| 男女裸体影院高潮| 国产一区观看| 国产美女主播在线| 在线免费高清一区二区三区| 国产精品videossex国产高清 | 精品国产av鲁一鲁一区| 欧美精品 国产精品| 91黄色在线视频| 91精品啪在线观看国产60岁| 一区二区精品视频在线观看| 欧美日韩1区2区| 国产麻豆免费视频| 精品国精品国产| 黄色一级大片在线免费看国产一| 亚洲国产精品成人精品| 无码精品在线观看| 亚洲视频在线观看视频| а天堂8中文最新版在线官网| 中日韩美女免费视频网址在线观看 | 国产成人免费视频一区| 精品人妻无码中文字幕18禁| 成人h精品动漫一区二区三区| 水蜜桃av无码| 久久精子c满五个校花| 黄色国产在线播放| 亚洲色大成网站www久久九九| 青青操国产视频| 午夜精品久久久久久不卡8050| 欧美精品二区三区| 欧美四级电影在线观看| 国产免费高清av| 亚洲精品国产成人| 国产高清视频在线观看| 久久偷看各类女兵18女厕嘘嘘| av在线看片| 91av视频在线| 国产成人久久精品麻豆二区| 99re资源| 神马影视一区二区| a级黄色片网站| 亚洲人成毛片在线播放女女| 黄色一级大片在线观看| 精品系列免费在线观看| 中文字幕一区二区人妻电影丶| 久久精品这里都是精品| 99精品久久久久| 在线看国产日韩| 国产精品无码一区二区桃花视频| 精品国产乱码久久| 免费在线黄色影片| 久久99精品视频一区97| 在线天堂资源| 97久久精品午夜一区二区| 亚洲婷婷丁香| 欧美黄色免费网址| 日韩av不卡在线观看| 绯色av蜜臀vs少妇| 中文字幕成人av| 日韩精品一区二区三| 欧美日韩成人一区二区| 亚州视频一区二区三区| 久久亚洲精品毛片| 成人av三级| 高清一区二区三区视频| 成人羞羞网站入口| 漂亮人妻被中出中文字幕| 国产一本一道久久香蕉| 天堂在线中文视频| 欧美日韩国产专区| 国产黄色高清视频| 日韩专区中文字幕| 日韩精选视频| 精品国产一区二区三区免费| 最新国产精品| 国产 porn| 久久综合九色综合97婷婷女人| 久久久久久久九九九九| 欧美片网站免费| 国内精品久久影院| 国产高清亚洲| 一本久久a久久精品vr综合| 99精品国产在热久久下载| 日本中文字幕精品| 中文字幕一区二区三区在线不卡 | 国产日韩三区| 欧美日韩国产在线一区| 99日在线视频| 国产精品嫩草影院com| 亚洲综合成人av| 国产亚洲激情在线| 久久毛片亚洲| 日本一区二区精品视频| 久久激情视频| 无码熟妇人妻av| 欧美午夜久久久| 日本ー区在线视频| 97视频在线观看免费高清完整版在线观看 | 欧美日韩国产黄| 五月天婷婷在线观看| 91sa在线看| 欧美大胆a级| 中国丰满人妻videoshd| 99国产精品一区| 丰满人妻老熟妇伦人精品| 亚洲精品97久久| 成人性生活视频| 日韩欧美三级一区二区| 奇米777欧美一区二区| 五月激情四射婷婷| 欧美日韩国产一级片| 麻豆传媒视频在线观看免费| 国产色综合天天综合网 | 国产日韩欧美电影| 中文字幕一区二区三区波野结| 最近2019中文字幕一页二页| 日本精品久久| av动漫在线免费观看| 成人99免费视频| 久久国产视频播放| 亚洲一区二区福利| 日本国产一区| 日韩精品久久一区二区| 95精品视频在线| 午夜精品久久久久久久蜜桃| 这里只有视频精品| 国产在线不卡一区二区三区| 欧美人成在线观看| 久久无码av三级| 在线观看亚洲一区二区| 久久久999成人| 国产+成+人+亚洲欧洲在线| 日韩中文字幕三区| 国产精品毛片无遮挡高清| 国产国语亲子伦亲子| 欧洲精品在线视频| 天天综合国产| 一边摸一边做爽的视频17国产| 日本精品视频一区二区| 91欧美一区二区三区| 91精品成人| 韩国三级视频在线观看| 一本色道亚洲精品aⅴ| 日本a在线播放| 国产精品二区在线观看| 日日夜夜免费精品| 亚洲色偷偷综合亚洲av伊人| 亚洲黄色www| 伊人久久一区| xxxx18hd亚洲hd捆绑| 中文字幕制服丝袜一区二区三区| 亚洲女人18毛片水真多| 国产精品女主播视频| 激情成人亚洲| 成人欧美一区二区三区黑人一 | 黄色在线网站| 高清国产在线一区| 日韩av电影一区| 国产精品成人网站| 日日狠狠久久偷偷四色综合免费| 啪啪国产精品|