色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Lambda表達式詳解

zzw_111_bit ? 來源:zzw_111_bit ? 作者:zzw_111_bit ? 2023-02-09 11:28 ? 次閱讀

C++11中的Lambda表達式用于 定義并創建匿名的函數對象 ,以簡化編程工作。下面看一下Lambda表達式的基本構成。

基本構成

首先是Lambda的基本結構:

capture mutable ->return-type

{

statement

}

整體的結構可以表示為:函數對象參數mutable ->返回值{函數體}。下面依次介紹各個部分的定義及用法。

函數對象參數

[] ,用這個方括號標識一個Lambda表達式的開始,這一部分 必須存在,不能省略 。函數對象參數是傳遞給編譯器自動生成的函數對象類的構造函數的。函數對象參數只能使用那些到定義Lambda為止時Lambda所在作用范圍內可見的 局部變量 (包括Lambda所在類的this)。

int a=1;
  [](){
    cout<endl;
  }();

在這個例子中,函數對象為空,訪問不到a,程序會報錯。(最后加一個括號是直接調用)函數對象參數有以下形式:

  • 空。沒有使用任何函數對象參數。
  • =。函數體內可以使用Lambda所在作用范圍內所有可見的局部變量(包括Lambda所在類的this),并且是 值傳遞方式 (相當于編譯器自動為我們按值傳遞了所有局部變量)。 這種方式最為常用
  • &。函數體內可以使用Lambda所在作用范圍內所有可見的局部變量(包括Lambda所在類的this),并且是 引用傳遞方式 (相當于編譯器自動為我們按引用傳遞了所有局部變量)。
  • this。函數體內可以使用Lambda所在類中的成員變量。
  • a。將a按值進行傳遞。按值進行傳遞時,函數體內不能修改傳遞進來的a的拷貝,因為默認情況下函數是const的。要修改傳遞進來的a的拷貝,可以添加mutable修飾符。
  • &a。將a按引用進行傳遞。=,&a, &b。除a和b按引用進行傳遞外,其他參數都按值進行傳遞。? &, a, b。除a和b按值進行傳遞外,其他參數都按引用進行傳遞。

常用的方式就第二種和第三種。其它的方式根據具體的情況進行選擇。

操作符重載函數參數

標識重載的()操作符的參數,沒有參數時,這部分可以省略。參數可以通過按值(如:(a,b))和按引用(如:(&a,&b))兩種方式進行傳遞。這個就類似與普通函數的形參。

可修改標示符

mutable聲明,這部分可以省略。按值傳遞函數對象參數時,加上mutable修飾符后,可以修改按值傳遞進來的拷貝(注意是能修改拷貝,而不是值本身)。

int a=1;
    //不可修改
  [=](){
    a=2;
  }();
  //可以修改
   [=]()mutable{
    a=2;
  }();

只是對值的拷貝進行修改,函數外部變量的值仍未改變。

函數返回值

->返回值類型,標識函數返回值的類型,當返回值為void,或者函數體中只有一處return的地方(此時編譯器可以自動推斷出返回值類型)時,這部分可以省略。

函數體

{},標識函數的實現,這部分不能省略,但函數體可以為空。

Lambda作為返回值

在C++11中只能使用std::function指定返回值,將欲返回的lambda表達式轉換成function對象。

auto num = [](int i, int j){ return i - j; };
int main(){
    cout<1,2);
}

上述是將Lambda作為一個對象,然后用auto自動轉換類型,同時可以指定類型也就是function對象。

function<int(int,int)> num = [](int i, int j){ return i - j; };
  cout<1,2);

這個模板對象中需要傳入函數返回值類型和形參類型,通常使用auto進行自動轉換。

std::function<void(int)> func(){
	return [] (int e) { std::cout << e; };
  }
func()(10);

這個例子是將Lambda作為函數的返回值。

總結

Lambda還有許多種用處,通常也可以作為STL種算法的參數傳入,用于處理一些邏輯較為簡單的函數結構,例如比較大小等。

std::sort(v.begin(), v.end(), [] ( int n1, int n2 ) { return n1 > n2; });

這個例子就是用sort算法,并利用Lambda進行排序。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62653
  • C++
    C++
    +關注

    關注

    22

    文章

    2109

    瀏覽量

    73671
  • Lambda
    +關注

    關注

    0

    文章

    29

    瀏覽量

    9885
收藏 人收藏

    評論

    相關推薦

    C++的lambda表達式詳解

    lambda 表達式就是一個函數(匿名函數),也就是一個沒有函數名的函數。為什么不需要函數名呢,因為我們直接(一次性的)用它,嵌入式用的它,不需要其他地方調用它。
    發表于 10-27 10:13 ?1085次閱讀

    Java Lambda表達式的新特性

    Java Lambda表達式是Java 8中最重要的新特性之一。 它們是一種可傳遞的匿名函數,可以作為參數傳遞給方法或存儲在變量中,因此可以在需要的時候調用它們。 基礎 1. 簡介 Lambda
    的頭像 發表于 09-30 10:29 ?2591次閱讀

    什么是正則表達式?正則表達式如何工作?哪些語法規則適用正則表達式

    正則表達式又稱規則表達式(Regular Expression,在代碼中常簡寫為 regex、regexp 或 RE),是一種用于匹配、查找、替換文本的強大工具。它能夠以特定的模式匹配字符串,從而
    的頭像 發表于 11-03 14:41 ?3680次閱讀
    什么是正則<b class='flag-5'>表達式</b>?正則<b class='flag-5'>表達式</b>如何工作?哪些語法規則適用正則<b class='flag-5'>表達式</b>?

    哪位大神詳細介紹委托、匿名方法、Lambda表達式

    委托、匿名方法、Lambda表達式總結
    發表于 11-11 07:50

    防范表達式的失控

    在C 語言中,表達式是最重要的組成部分之一,幾乎所有的代碼都由表達式構成。表達式的使用如此廣泛,讀者也許會產生這樣的疑問,像+ 、- 、3 、/ 、& & 這樣簡單的運算也會出現
    發表于 04-22 16:57 ?13次下載

    關于java正則表達式的用法詳解

    正則表達式 一個正則表達式是一個用于文本搜索的文本模式。換句話說,在文本中搜索出現的模式。例如,你可以用正則表達式搜索網頁中的郵箱地址或超鏈接。 正則表達式示例 下面是一個簡單的Jav
    發表于 09-27 14:24 ?0次下載

    Python正則表達式指南

    本文介紹了Python對于正則表達式的支持,包括正則表達式基礎以及Python正則表達式標準庫的完整介紹及使用示例。本文的內容不包括如何編寫高效的正則表達式、如何優化正則
    發表于 03-26 09:13 ?10次下載
    Python正則<b class='flag-5'>表達式</b>指南

    表達式與邏輯門之間的關系

    邏輯表達式是指表示一個表示邏輯運算關系的式子,是一個抽象的類似數學表達式,下面我們重點說明下其表達式與邏輯門之間的關系。
    的頭像 發表于 02-15 14:54 ?1630次閱讀
    <b class='flag-5'>表達式</b>與邏輯門之間的關系

    C語言的表達式

    在C語言中,表達式是由操作符和操作數組成。表達式可以由一個或者多個操作數組成,不同的操作符與操作數組成不同的表達式,因此,表達式才是C語言的基本。
    的頭像 發表于 02-21 15:09 ?1367次閱讀
    C語言的<b class='flag-5'>表達式</b>

    Python中的Lambda表達式

    在 Python 中,Lambda 表達式是一種非常強大的工具,它可以讓你快速創建小型匿名函數,而不需要顯式地定義函數名稱。Lambda 表達式通常用于傳遞函數對象或簡單的函數式編程。
    的頭像 發表于 04-19 15:49 ?832次閱讀

    網絡工程師學Python-Lambda表達式

    在 Python 中,Lambda 表達式是一種非常強大的工具,它可以讓你快速創建小型匿名函數,而不需要顯式地定義函數名稱。Lambda 表達式通常用于傳遞函數對象或簡單的函數式編程。
    的頭像 發表于 04-19 15:51 ?912次閱讀

    一文詳解Verilog表達式

    表達式由操作符和操作數構成,其目的是根據操作符的意義得到一個計算結果。表達式可以在出現數值的任何地方使用。
    的頭像 發表于 05-29 16:23 ?2858次閱讀
    一文<b class='flag-5'>詳解</b>Verilog<b class='flag-5'>表達式</b>

    為什么引入Lambda?C++11 Lambda表達式介紹

    Lambda表達式是一個可以內聯在我們代碼中的函數,我們可以將他傳遞給另外一個函數。
    的頭像 發表于 07-18 16:26 ?642次閱讀

    如何使用lambda表達式提升開發效率?

    Java8 的一個大亮點是引入 Lambda 表達式,使用它設計的代碼會更加簡潔。當開發者在編寫 Lambda 表達式時,也會隨之被編譯成一個函數式接口。
    發表于 08-24 10:25 ?298次閱讀

    zabbix觸發器表達式 基本RS觸發器表達式 rs觸發器的邏輯表達式

    zabbix觸發器表達式 基本RS觸發器表達式 rs觸發器的邏輯表達式? Zabbix是一款開源的監控軟件,它能通過監控指標來實時監測服務器和網絡的運行狀態,同時還能提供警報和報告等功能來幫助管理員
    的頭像 發表于 08-24 15:50 ?1595次閱讀
    主站蜘蛛池模板: 日本 稀土矿| videossex性暴力| TIMI1TV天美传媒在线观看| 国产亚洲精品久久久久久久软件 | 麻豆国产人妻欲求不满| 视频一区国产| 交换:年轻夫妇-HD中文字幕| 亚洲国产在线观看免费视频| 久久免费资源福利资源站| 蜜桃人妻无码AV天堂三区| 一本道高清不卡v免费费| 国产乱对白精彩在线播放| 天天狠狠色综合图片区| 国产h视频在线观看网站免费| 人人啪日日观看在线| fryee性欧美18 19| 欧美最猛黑人AAAAA片| www色小姐| 十二月综合缴缴情| 国产国产乱老熟视频网站 | 诱受H嗯啊巨肉各种play| 牢记永久免费网址| 97色香蕉在线| 欧美激情精品久久久久| 草莓视频免费在线观看| 99久久精品免费精品国产| 日本xxxx裸体xxxx| 果冻传媒AV精品一区| 最新国产麻豆精品| 美女脱衣服搞鸡| 99国产在线视频有精品视频| 欧美大片xxxxbbbb| 成人在线观看播放| 无码人妻精品国产婷婷| 国产午夜精品理论片久久影视| 亚洲国产成人精品青青草原100| 好男人在线观看视频观看高清视频免费 | 99热在线视频这里只精品| 日本久久久久久久做爰片日本 | 99久久就热视频精品草| 欧美日韩高清一区|