精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩亚洲欧美高清| 亚洲欧洲三级电影| 日韩女在线观看| 最新日韩免费视频| 中文字幕日韩在线| 岛国视频午夜一区免费在线观看| 日韩中文字幕一区| 成人av手机在线| 日欧美一区二区| 久久久久久久久久国产精品| 一色道久久88加勒比一| 日本一区影院| 欧美日韩精品欧美日韩精品一| 福利视频免费在线观看| 午夜精品一区| 久久综合狠狠综合久久激情| 亚洲一区二区三区在线免费观看| 国产综合精品视频| 韩国欧美一区| 日韩中文字幕精品| 久久av无码精品人妻系列试探| 国产精品一区二区三区www| 一本一道久久a久久精品| 黄色一级片黄色| 快射av在线播放一区| 久久久久久久久久久黄色 | www.五月婷婷.com| 99热这里只有成人精品国产| 欧美成人精品h版在线观看| 日韩女同一区二区三区| 亲子伦视频一区二区三区| 日韩一区二区高清| 一起操在线视频| 123成人网| 在线视频欧美精品| 国产99久久九九精品无码| 国产黄色大片在线观看| 亚洲情趣在线观看| 亚洲第一页在线视频| 亚洲xxxxxx| 欧美激情综合在线| 日韩视频在线观看国产| 精品美女视频在线观看免费软件| www.亚洲色图| 国产精品永久入口久久久| 国产熟女精品视频| 国产美女视频91| 成人在线国产精品| 一级片在线免费观看视频| 免费xxxx性欧美18vr| 国产精品v片在线观看不卡| www.久久精品视频| 玖玖国产精品视频| 国产精品r级在线| 中文字幕 国产| 日本不卡不码高清免费观看| 国产精品精品视频一区二区三区| 日本妇乱大交xxxxx| 日本视频一区二区三区| 国产精品欧美日韩久久| 亚洲一区二区人妻| 精品亚洲porn| 成人av蜜桃| 亚洲美女福利视频| 99久久er热在这里只有精品66| 国内精品一区二区| 黄色国产在线| 中文字幕一区二区三区在线观看| 欧美 另类 交| 手机在线免费看av| 亚洲国产成人av网| 日韩av片在线看| 日韩色淫视频| 欧美日韩国产一二三| 亚洲制服在线观看| 国产精品99久久免费观看| 日韩麻豆第一页| 丰满的亚洲女人毛茸茸| 午夜精品毛片| 高清一区二区三区四区五区| 国产主播在线观看| 老司机午夜精品视频| 成人a级免费视频| 隣の若妻さん波多野结衣| 99国产精品国产精品久久| 日韩欧美一区二区在线观看| 久久综合之合合综合久久| 亚洲成av人片观看| 日韩一级片播放| 精品视频一二| 亚洲另类xxxx| 色在线观看视频| 久久国产66| 91麻豆精品秘密入口| 欧美孕妇孕交xxⅹ孕妇交| 国产精品久久久久久久久久免费看| 中文字幕人妻熟女人妻洋洋| 性欧美1819sex性高清| 欧美一级免费大片| 99久久人妻无码精品系列| 欧美高清日韩| 国产精品偷伦视频免费观看国产| 成人高潮片免费视频| 欧美激情一区二区三区不卡| 被灌满精子的波多野结衣| 88xx成人网| 亚洲激情在线视频| 欧美性x x x| 日本成人在线不卡视频| 国产精品乱码视频| 久久综合网导航| 在线观看三级视频欧美| 亚洲国产精品狼友在线观看| 久久精品国产亚洲夜色av网站| 4444欧美成人kkkk| 国内精品久久久久久久久久久 | 国产精品白丝喷水在线观看| 亚洲欧美视频| 精品久久久久久一区| 国产在线激情视频| 欧美色视频在线观看| 中出视频在线观看| 国产一区激情| 92看片淫黄大片看国产片| 国产福利在线视频| 欧美性xxxx在线播放| fc2成人免费视频| 欧美成人69av| 成人综合网网址| 91视频在线观看| 在线欧美日韩精品| 少妇光屁股影院| 日韩五码在线| 国产精品美女久久久久av福利| 中文字幕在线播放网址| 欧美伦理视频网站| 萌白酱视频在线| 日本美女一区二区三区视频| 欧美三日本三级少妇三99| 不卡视频观看| 亚洲福利视频免费观看| 久久精品免费av| 成人精品在线视频观看| 97碰在线视频| eeuss鲁片一区二区三区| 欧美成人国产va精品日本一级| 91tv国产成人福利| 国产精品不卡视频| 97人人模人人爽人人澡| 欧美伊人久久| 成人欧美一区二区| 不卡一本毛片| 亚洲国产精品中文| 成人午夜视频在线播放| 99久久精品国产一区| 国内自拍在线观看| 国产成人精品免费视| 国产精品第一视频| 色视频在线免费观看| 制服丝袜av成人在线看| 波多野结衣亚洲色图| 成人一区二区在线观看| 六月丁香激情网| 欧美人与拘性视交免费看| 国产成+人+综合+亚洲欧洲| 国产在线小视频| 欧美另类z0zxhd电影| 欧美人禽zoz0强交| 99久久综合国产精品| 成人黄色片视频| 日韩视频在线观看| 91蜜桃网站免费观看| 成人三级高清视频在线看| 亚洲男人天堂2024| 91麻豆成人精品国产免费网站| 综合欧美一区二区三区| 在线中文字日产幕| 久久亚洲风情| 蜜桃网站在线观看| 亚洲人挤奶视频| 国产情人节一区| 国产一线二线在线观看 | 97超碰最新| www.成人爱| 久久久国产视频91| 色欲av伊人久久大香线蕉影院| 日本乱人伦aⅴ精品| 亚洲天堂黄色片| 久久久精品中文字幕麻豆发布| 一级片视频免费观看| 影音先锋亚洲精品| 亚洲乱码一区二区三区三上悠亚| h视频久久久| 国产精品福利在线观看| 黄页网站在线| 中文字幕日韩精品有码视频| 后进极品白嫩翘臀在线视频| 欧美色老头old∨ideo| 国产在线视频99| 国产精品麻豆99久久久久久| 国产人成视频在线观看| 欧美96一区二区免费视频| 美脚丝袜脚交一区二区| 91欧美大片| 免费国产一区二区| 亚洲视频三区| 91精品久久久久久久久久入口 | 痴汉一区二区三区| 成人自拍视频网| 性欧美激情精品| 中文字幕资源网在线观看| 伊人久久五月天| 头脑特工队2免费完整版在线观看| 日韩一区二区免费视频| 日韩av免费播放| 精品动漫一区二区| 真实国产乱子伦对白在线| 国产精品伦理在线| 亚洲性猛交xxxx乱大交| 成人av在线网| 国产成人精品综合久久久久99| 美腿丝袜亚洲三区| 亚洲狼人综合干| 免费看亚洲片| 国产中文字幕在线免费观看| 国产精品av久久久久久麻豆网| 伊人天天久久大香线蕉av色| 日韩欧美中字| 日韩av在线一区二区三区| 蜜乳av综合| 麻豆av一区二区| 精品自拍偷拍| 国产亚洲情侣一区二区无| 91大神精品| 成人18视频| av成人app永久免费| 91丨九色丨国产| 精品中文字幕一区二区三区四区| 国产欧美日韩免费| 久久av日韩| 国产日韩在线精品av| 日本中文字幕视频一区| 国产在线播放不卡| gogo大尺度成人免费视频| 国产一区二区丝袜| 性欧美video另类hd尤物| 国产一区香蕉久久| 97久久中文字幕| 99热在线国产| 成人在线超碰| 国产一区二区在线观看免费播放| 黄色欧美在线| 久久精品日产第一区二区三区乱码| 卡通动漫国产精品| 欧美日韩亚洲综合一区二区三区激情在线| 色橹橹欧美在线观看视频高清| 国产一区福利视频| 伊人成综合网yiren22| 欧洲一区二区在线观看| 成人免费在线播放| 欧美性受黑人性爽| 欧美激情第10页| 国产主播自拍av| 欧美亚洲在线| 少妇网站在线观看| 国产一区二区三区观看| 人妻互换一二三区激情视频| 91色在线porny| 538精品视频| 一区二区三区在线播| www.中文字幕在线观看| 在线中文字幕一区二区| 国产又粗又猛又爽又黄视频 | 国产在线观看91精品一区| 久久久久久久久久久久电影| 国产日韩亚洲精品| 精品国产一级毛片| 乱子伦一区二区| 一本久道综合久久精品| 99视频在线视频| 国产成人免费在线视频| 青青草福利视频| 综合激情成人伊人| 国产精品第9页| 欧美网站大全在线观看| 国产黄色片免费| 亚洲一区二区黄| 国内小视频在线看| 国产精品丝袜白浆摸在线| 国产乱论精品| 亚洲天堂电影网| 一本久久知道综合久久| aaa一级黄色片| 26uuuu精品一区二区| 韩国一级黄色录像| 精品福利在线视频| 国产欧美久久久| 亚洲欧美成人在线| 美女尤物在线视频| 国产精品自拍偷拍| 天堂资源在线亚洲| 成人在线免费观看网址| 久久综合九色| 国产精品成人无码专区| 一色桃子久久精品亚洲| 天堂网免费视频| 精品处破学生在线二十三| 在线观看免费网站黄| 2019中文字幕在线| 国产视频一区二区在线播放| 欧洲亚洲一区| 国产视频一区三区| 午夜性福利视频| 专区另类欧美日韩| 免费黄色小视频在线观看| 日韩欧美电影在线| 黄色免费在线观看| 国产精品91在线观看| 国产香蕉精品| 999一区二区三区| 精品一区二区三区视频在线观看| 日本高清www| 欧美视频在线观看 亚洲欧| 俄罗斯嫩小性bbwbbw| 久久精品免费播放| 亚洲成人高清| 亚洲国产婷婷香蕉久久久久久99| 久久精品道一区二区三区| 日韩精品视频一区二区| 亚洲美女屁股眼交| 国产男女无套免费网站| 日日骚av一区| 欧美大片网站| 亚洲欧洲日韩精品| 日本不卡一区二区三区| 亚洲自拍偷拍图| 色嗨嗨av一区二区三区| 欧美日韩在线精品一区二区三区激情综| 欧美电影院免费观看| 欧美孕妇孕交| 2018国产精品视频| 欧美日韩导航| 国模无码视频一区二区三区| 99亚偷拍自图区亚洲| 日韩 欧美 亚洲| 亚洲国产精品高清久久久| 97天天综合网| 国产精品视频免费一区| 激情久久久久| 人体私拍套图hdxxxx| 黑人巨大精品欧美一区二区| 污视频网站免费观看| 91精品国产91久久久久久不卡| 精品国产一区二区三区不卡蜜臂 | 欧美日韩国产精选| 日本最黄一级片免费在线| 成人精品一区二区三区电影免费| 小小影院久久| 亚洲少妇中文字幕| 欧美日韩美女视频| 成人全视频高清免费观看| 国产日韩欧美91| 国色天香一区二区| 3d动漫精品啪啪一区二区下载| 欧洲生活片亚洲生活在线观看| 91美女视频在线| 亚洲最大成人免费视频| 精品99视频| 免费观看av网站| 91麻豆精品国产91久久久久久| 日皮视频在线观看| 裸体丰满少妇做受久久99精品| 日韩av一区二区在线影视| 亚洲 欧美 变态 另类 综合| 日韩免费电影一区| 97se综合| 妞干网这里只有精品| caoporn国产一区二区| 波多野结衣理论片| 欧美精品性视频| 伊人久久大香线蕉综合网站 | 操91在线视频| 香蕉国产成人午夜av影院| 色天使在线观看| 午夜精彩视频在线观看不卡| 91精品专区| 国产激情一区二区三区在线观看 | 午夜免费福利网站| 精品久久久久久国产| 欧美jizzhd欧美| 玛丽玛丽电影原版免费观看1977| 久久精品久久99精品久久| 国产精品成人aaaa在线| 在线激情影院一区| 欧美freesex8一10精品| 永久av免费在线观看| 色一情一乱一乱一91av| 精品精品导航| 亚洲一区二区三区在线观看视频| av在线不卡电影|