在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Lambda表達(dá)式詳解

zzw_111_bit ? 來(lái)源:zzw_111_bit ? 作者:zzw_111_bit ? 2023-02-09 11:28 ? 次閱讀

C++11中的Lambda表達(dá)式用于 定義并創(chuàng)建匿名的函數(shù)對(duì)象 ,以簡(jiǎn)化編程工作。下面看一下Lambda表達(dá)式的基本構(gòu)成。

基本構(gòu)成

首先是Lambda的基本結(jié)構(gòu):

capture mutable ->return-type

{

statement

}

整體的結(jié)構(gòu)可以表示為:函數(shù)對(duì)象參數(shù)mutable ->返回值{函數(shù)體}。下面依次介紹各個(gè)部分的定義及用法。

函數(shù)對(duì)象參數(shù)

[] ,用這個(gè)方括號(hào)標(biāo)識(shí)一個(gè)Lambda表達(dá)式的開(kāi)始,這一部分 必須存在,不能省略 。函數(shù)對(duì)象參數(shù)是傳遞給編譯器自動(dòng)生成的函數(shù)對(duì)象類的構(gòu)造函數(shù)的。函數(shù)對(duì)象參數(shù)只能使用那些到定義Lambda為止時(shí)Lambda所在作用范圍內(nèi)可見(jiàn)的 局部變量 (包括Lambda所在類的this)。

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

在這個(gè)例子中,函數(shù)對(duì)象為空,訪問(wèn)不到a,程序會(huì)報(bào)錯(cuò)。(最后加一個(gè)括號(hào)是直接調(diào)用)函數(shù)對(duì)象參數(shù)有以下形式:

  • 空。沒(méi)有使用任何函數(shù)對(duì)象參數(shù)。
  • =。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見(jiàn)的局部變量(包括Lambda所在類的this),并且是 值傳遞方式 (相當(dāng)于編譯器自動(dòng)為我們按值傳遞了所有局部變量)。 這種方式最為常用
  • &。函數(shù)體內(nèi)可以使用Lambda所在作用范圍內(nèi)所有可見(jiàn)的局部變量(包括Lambda所在類的this),并且是 引用傳遞方式 (相當(dāng)于編譯器自動(dòng)為我們按引用傳遞了所有局部變量)。
  • this。函數(shù)體內(nèi)可以使用Lambda所在類中的成員變量。
  • a。將a按值進(jìn)行傳遞。按值進(jìn)行傳遞時(shí),函數(shù)體內(nèi)不能修改傳遞進(jìn)來(lái)的a的拷貝,因?yàn)槟J(rèn)情況下函數(shù)是const的。要修改傳遞進(jìn)來(lái)的a的拷貝,可以添加mutable修飾符。
  • &a。將a按引用進(jìn)行傳遞。=,&a, &b。除a和b按引用進(jìn)行傳遞外,其他參數(shù)都按值進(jìn)行傳遞。? &, a, b。除a和b按值進(jìn)行傳遞外,其他參數(shù)都按引用進(jìn)行傳遞。

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

操作符重載函數(shù)參數(shù)

標(biāo)識(shí)重載的()操作符的參數(shù),沒(méi)有參數(shù)時(shí),這部分可以省略。參數(shù)可以通過(guò)按值(如:(a,b))和按引用(如:(&a,&b))兩種方式進(jìn)行傳遞。這個(gè)就類似與普通函數(shù)的形參。

可修改標(biāo)示符

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

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

只是對(duì)值的拷貝進(jìn)行修改,函數(shù)外部變量的值仍未改變。

函數(shù)返回值

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

函數(shù)體

{},標(biāo)識(shí)函數(shù)的實(shí)現(xiàn),這部分不能省略,但函數(shù)體可以為空。

Lambda作為返回值

在C++11中只能使用std::function指定返回值,將欲返回的lambda表達(dá)式轉(zhuǎn)換成function對(duì)象。

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

上述是將Lambda作為一個(gè)對(duì)象,然后用auto自動(dòng)轉(zhuǎn)換類型,同時(shí)可以指定類型也就是function對(duì)象。

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

這個(gè)模板對(duì)象中需要傳入函數(shù)返回值類型和形參類型,通常使用auto進(jìn)行自動(dòng)轉(zhuǎn)換。

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

這個(gè)例子是將Lambda作為函數(shù)的返回值。

總結(jié)

Lambda還有許多種用處,通常也可以作為STL種算法的參數(shù)傳入,用于處理一些邏輯較為簡(jiǎn)單的函數(shù)結(jié)構(gòu),例如比較大小等。

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

這個(gè)例子就是用sort算法,并利用Lambda進(jìn)行排序。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4370

    瀏覽量

    64193
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2117

    瀏覽量

    74778
  • Lambda
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10114
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++的lambda表達(dá)式詳解

    lambda 表達(dá)式就是一個(gè)函數(shù)(匿名函數(shù)),也就是一個(gè)沒(méi)有函數(shù)名的函數(shù)。為什么不需要函數(shù)名呢,因?yàn)槲覀冎苯樱ㄒ淮涡缘模┯盟度胧接玫乃恍枰渌胤秸{(diào)用它。
    發(fā)表于 10-27 10:13 ?1252次閱讀

    Java Lambda表達(dá)式的新特性

    Java Lambda表達(dá)式是Java 8中最重要的新特性之一。 它們是一種可傳遞的匿名函數(shù),可以作為參數(shù)傳遞給方法或存儲(chǔ)在變量中,因此可以在需要的時(shí)候調(diào)用它們。 基礎(chǔ) 1. 簡(jiǎn)介 Lambda
    的頭像 發(fā)表于 09-30 10:29 ?2816次閱讀

    什么是正則表達(dá)式?正則表達(dá)式如何工作?哪些語(yǔ)法規(guī)則適用正則表達(dá)式

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

    哪位大神詳細(xì)介紹委托、匿名方法、Lambda表達(dá)式

    委托、匿名方法、Lambda表達(dá)式總結(jié)
    發(fā)表于 11-11 07:50

    防范表達(dá)式的失控

    在C 語(yǔ)言中,表達(dá)式是最重要的組成部分之一,幾乎所有的代碼都由表達(dá)式構(gòu)成。表達(dá)式的使用如此廣泛,讀者也許會(huì)產(chǎn)生這樣的疑問(wèn),像+ 、- 、3 、/ 、& & 這樣簡(jiǎn)單的運(yùn)算也會(huì)出現(xiàn)
    發(fā)表于 04-22 16:57 ?13次下載

    關(guān)于java正則表達(dá)式的用法詳解

    正則表達(dá)式 一個(gè)正則表達(dá)式是一個(gè)用于文本搜索的文本模式。換句話說(shuō),在文本中搜索出現(xiàn)的模式。例如,你可以用正則表達(dá)式搜索網(wǎng)頁(yè)中的郵箱地址或超鏈接。 正則表達(dá)式示例 下面是一個(gè)簡(jiǎn)單的Jav
    發(fā)表于 09-27 14:24 ?0次下載

    Python正則表達(dá)式指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫高效的正則表達(dá)式、如何優(yōu)化正則
    發(fā)表于 03-26 09:13 ?10次下載
    Python正則<b class='flag-5'>表達(dá)式</b>指南

    表達(dá)式與邏輯門之間的關(guān)系

    邏輯表達(dá)式是指表示一個(gè)表示邏輯運(yùn)算關(guān)系的式子,是一個(gè)抽象的類似數(shù)學(xué)表達(dá)式,下面我們重點(diǎn)說(shuō)明下其表達(dá)式與邏輯門之間的關(guān)系。
    的頭像 發(fā)表于 02-15 14:54 ?2054次閱讀
    <b class='flag-5'>表達(dá)式</b>與邏輯門之間的關(guān)系

    C語(yǔ)言的表達(dá)式

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

    Python中的Lambda表達(dá)式

    在 Python 中,Lambda 表達(dá)式是一種非常強(qiáng)大的工具,它可以讓你快速創(chuàng)建小型匿名函數(shù),而不需要顯式地定義函數(shù)名稱。Lambda 表達(dá)式通常用于傳遞函數(shù)對(duì)象或簡(jiǎn)單的函數(shù)式編程。
    的頭像 發(fā)表于 04-19 15:49 ?1041次閱讀

    網(wǎng)絡(luò)工程師學(xué)Python-Lambda表達(dá)式

    在 Python 中,Lambda 表達(dá)式是一種非常強(qiáng)大的工具,它可以讓你快速創(chuàng)建小型匿名函數(shù),而不需要顯式地定義函數(shù)名稱。Lambda 表達(dá)式通常用于傳遞函數(shù)對(duì)象或簡(jiǎn)單的函數(shù)式編程。
    的頭像 發(fā)表于 04-19 15:51 ?1063次閱讀

    一文詳解Verilog表達(dá)式

    表達(dá)式由操作符和操作數(shù)構(gòu)成,其目的是根據(jù)操作符的意義得到一個(gè)計(jì)算結(jié)果。表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用。
    的頭像 發(fā)表于 05-29 16:23 ?3172次閱讀
    一文<b class='flag-5'>詳解</b>Verilog<b class='flag-5'>表達(dá)式</b>

    為什么引入Lambda?C++11 Lambda表達(dá)式介紹

    Lambda表達(dá)式是一個(gè)可以內(nèi)聯(lián)在我們代碼中的函數(shù),我們可以將他傳遞給另外一個(gè)函數(shù)。
    的頭像 發(fā)表于 07-18 16:26 ?820次閱讀

    如何使用lambda表達(dá)式提升開(kāi)發(fā)效率?

    Java8 的一個(gè)大亮點(diǎn)是引入 Lambda 表達(dá)式,使用它設(shè)計(jì)的代碼會(huì)更加簡(jiǎn)潔。當(dāng)開(kāi)發(fā)者在編寫 Lambda 表達(dá)式時(shí),也會(huì)隨之被編譯成一個(gè)函數(shù)式接口。
    發(fā)表于 08-24 10:25 ?409次閱讀

    zabbix觸發(fā)器表達(dá)式 基本RS觸發(fā)器表達(dá)式 rs觸發(fā)器的邏輯表達(dá)式

    zabbix觸發(fā)器表達(dá)式 基本RS觸發(fā)器表達(dá)式 rs觸發(fā)器的邏輯表達(dá)式? Zabbix是一款開(kāi)源的監(jiān)控軟件,它能通過(guò)監(jiān)控指標(biāo)來(lái)實(shí)時(shí)監(jiān)測(cè)服務(wù)器和網(wǎng)絡(luò)的運(yùn)行狀態(tài),同時(shí)還能提供警報(bào)和報(bào)告等功能來(lái)幫助管理員
    的頭像 發(fā)表于 08-24 15:50 ?1905次閱讀
    主站蜘蛛池模板: 黄h网站| 午夜久久久久久久 | 中文字幕亚洲一区二区三区 | 久久99热精品这里久久精品 | 色婷婷六月丁香七月婷婷 | 美女18黄| 酒色网址 | 伊人久久综合成人网小说 | 啪啪影城 | 亚洲欧洲无码一区二区三区 | 你懂的网站在线 | 亚洲午夜精品在线 | 三级毛片网站 | 久久婷婷婷 | 日一日操一操 | 国产精品99r8免费视频2022 | 中文字幕一区二区三区四区五区人 | 俄罗斯小屁孩cao大人免费 | 免费在线不卡视频 | 国产在线播 | 激情欧美一区二区三区中文字幕 | 狠狠色噜噜狠狠狠狠2018 | 狠狠干在线观看 | 性夜影院爽黄a爽免费看网站 | 777奇米影视笫四色88me久久综合 | 又黄又粗暴的120秒免费gif视频 | 欧美性猛交ⅹxxx乱大交免费 | 亚洲成人观看 | 49vv婷婷网| 欧美日韩乱国产 | av2014天堂网| 亚洲一区中文字幕在线观看 | 久久婷婷婷 | 国产精品自在线天天看片 | 色婷婷综合久久久久中文一区二区 | 在线免费看高清视频大全 | 欧美在线bdsm调教一区 | 国产 麻豆 欧美亚洲综合久久 | 日本一本一道久久香蕉免费 | 国内亚州视频在线观看 | 四虎在线观看免费视频 |