亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中的Lambda函數(shù)詳解

 更新時(shí)間:2022年01月23日 16:43:20   作者:求知者先  
大家好,本篇文章主要講的是C++中的Lambda函數(shù)詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽

一 函數(shù)語(yǔ)法

我們平時(shí)調(diào)用函數(shù)的時(shí)候,都是需要被調(diào)用函數(shù)的函數(shù)名,但是匿名函數(shù)就不需要函數(shù)名,而且直接寫(xiě)在需要調(diào)用的地方,對(duì)于以前沒(méi)用過(guò)的小伙伴來(lái)說(shuō),第一眼看見(jiàn)了這語(yǔ)法可能很迷惑。

C++11的基本語(yǔ)法格式為:

[capture](parameters) -> return_type { /* ... */ }

(1) [capture] :[]內(nèi)為外部變量的傳遞方式,值、引用等,如下

[]        //表示的是在lambda定義之前的域,對(duì)外部參數(shù)的調(diào)用;
[=]       //表示外部參數(shù)直接傳值
[&]       //表示外部參數(shù)傳引用,可修改值。當(dāng)默認(rèn)捕獲符是 & 時(shí),后繼的簡(jiǎn)單捕獲符必須不以 & 開(kāi)始。而當(dāng)默認(rèn)捕獲符是 = 時(shí),后繼的簡(jiǎn)單捕獲符必須以 & 開(kāi)始。
[x, &y]   //x is captured by value, y is captured by reference
[&, x]    //x is explicitly captured by value. Other variables will be captured by reference
[=, &z]   //z is explicitly captured by reference. Other variables will be captured by value

(2)(parameters) :()內(nèi)為形參,和普通函數(shù)的形參一樣。
(3)-> return_type:->后面為lambda函數(shù)的返回類(lèi)型,如 -> int、-> string等。一般情況下,編譯器推出lambda函數(shù)的返回值,所以這部分可以省略不寫(xiě)。
(4){ /* … */ }:{}內(nèi)為函數(shù)主體,和普通函數(shù)一樣。

二 函數(shù)應(yīng)用

1、在普通函數(shù)中使用

首先是定義,執(zhí)行下面這句,不會(huì)運(yùn)行函數(shù) !??!

    std::function<int(int,int)> add = [](int a,int b) ->int {  return a + b;   };

上面代碼,你知道lambda函數(shù)返回類(lèi)型為int類(lèi)型,但是函數(shù)左邊不能直接賦值給int變量(編譯器會(huì)報(bào)錯(cuò)),因?yàn)榇颂帪閘ambda函數(shù)的定義,所以左邊為函數(shù)指針類(lèi)型變量,一般懶得寫(xiě)函數(shù)指針類(lèi)型,就直接賦值給auto類(lèi)型變量,如下。

    auto add = [](int a,int b) ->int {  return a + b;   };

下面才是函數(shù)的使用、運(yùn)行!??!
如何運(yùn)行l(wèi)ambda函數(shù)并獲取函數(shù)返回值?執(zhí)行函數(shù)需要看下面代碼:

    auto add = [](int a,int b) ->int {  return a + b;   };
    int result  = add(1,2);

又或者如下:

auto add = [](int a,int b) ->int {  return a + b;   };
int(*func_ptr)(int,int) = add ;
int result = func_ptr(1,2);

2、在qt信號(hào)槽中使用

我覺(jué)得labmda函數(shù)非常適合在信號(hào)槽中使用。
(1)返回的函數(shù)指針可以直接用在connect函數(shù)中,剛好契合。
(2)該槽函數(shù)可能比較簡(jiǎn)單,只有這個(gè)地方使用,可以省去槽函數(shù)聲明,使代碼看上去更加簡(jiǎn)便,且業(yè)務(wù)代碼更加集中。
基本使用

    connect(sys, &SYSClass::sig_1, this, [=](int index)
    {
        ......
    });

綁定信號(hào)槽的時(shí)候定義lambda函數(shù),當(dāng)收到信號(hào)的時(shí)候才執(zhí)行槽函數(shù),即lambda函數(shù)。
使用示范
在mTime時(shí)間后執(zhí)行動(dòng)畫(huà),動(dòng)畫(huà)執(zhí)行后delete對(duì)象,非常適合彈窗關(guān)閉時(shí),窗口關(guān)閉的動(dòng)畫(huà)操作。(widgetPtr為彈窗的指針)

    QTimer::singleShot(mTime,widgetPtr,[=]()
    {
        QPropertyAnimation *pAnimation = new QPropertyAnimation(widgetPtr,"windowOpacity",widgetPtr);
        pAnimation->setDuration(1000);
        pAnimation->setEasingCurve(QEasingCurve::InCirc);
        pAnimation->setStartValue(1.0);
        pAnimation->setEndValue(0.0);
        pAnimation->start();
        connect(pAnimation,&QPropertyAnimation::finished,[=]{
            delete widgetPtr;
        });
    });

3、在std::sort排序函數(shù)中的使用

在標(biāo)準(zhǔn)庫(kù)的排序函數(shù)使用中,可以使用函數(shù)回調(diào)的方式自定義排序的比較規(guī)則。
(1)sort函數(shù)提供排序算法;

(2)floatList為容器變量,提供數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù);

(3)他們兩個(gè)之間使用迭代器連接。

理解如下圖:


而我們sort函數(shù)可以使用第三個(gè)參數(shù)(函數(shù)回調(diào)方式)作為比較依據(jù)進(jìn)行排序,該參數(shù)就可以寫(xiě)成lambda函數(shù),這樣比較方法寫(xiě)在排序函數(shù)這里,可以使得代碼更加直白、簡(jiǎn)便、集中。參考代碼如下:

std::sort( floatList, floatList + N, [](float a, float b) 
		{
            return a < b;
        });

上面lambda函數(shù),是sort函數(shù)中的迭代器每次運(yùn)行做排序比較的時(shí)候就調(diào)用。
注意:
(1)lambda函數(shù)參數(shù)為( float , float ),類(lèi)型必須與容器的元素類(lèi)型一致。
(2)運(yùn)行時(shí),迭代器自動(dòng)幫你把參數(shù)傳入回調(diào)函數(shù)。
(3)回調(diào)函數(shù)返回值固定為bool,這里可以不寫(xiě),由編譯器自動(dòng)確定。

三 總結(jié)

lambda函數(shù)定義后返回的是函數(shù)指針類(lèi)型,即如:std::function<int(int,int)>,所以一般很少使用,我們?cè)诤芏啻a中也很少看到。
正常情況下,lambda函數(shù)相對(duì)普通函數(shù)的定義和使用其實(shí)沒(méi)什么優(yōu)勢(shì)。但是某些使用到函數(shù)指針的場(chǎng)合下,我們就可以酌情考慮使用,特別是函數(shù)指針作為函數(shù)參數(shù)的時(shí)候,比如qt的信號(hào)槽、回調(diào)函數(shù)等,使用起來(lái)即方便,又顯得代碼高大上,簡(jiǎn)直就完美O(∩_∩)O。

到此這篇關(guān)于C++中的Lambda函數(shù)詳解的文章就介紹到這了,更多相關(guān)C++ Lambda函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言判斷一個(gè)數(shù)是否為素?cái)?shù)方法解析

    C語(yǔ)言判斷一個(gè)數(shù)是否為素?cái)?shù)方法解析

    這篇文章主要介紹了C語(yǔ)言判斷一個(gè)數(shù)是否為素?cái)?shù)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Qt 儀表盤(pán)的實(shí)現(xiàn)示例

    Qt 儀表盤(pán)的實(shí)現(xiàn)示例

    儀表盤(pán)在很多汽車(chē)和物聯(lián)網(wǎng)相關(guān)的系統(tǒng)中很常用,本文就來(lái)介紹一下Qt 儀表盤(pán)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++嵌入式內(nèi)存管理詳情

    C++嵌入式內(nèi)存管理詳情

    這篇文章主要介紹了C++嵌入式內(nèi)存管理,是對(duì)上一篇內(nèi)存的一個(gè)補(bǔ)充,主要講解Linux中的內(nèi)存;這部分對(duì)于一些端側(cè)部署的伙伴來(lái)說(shuō)比較重要,推薦針對(duì)不同的板子,下面來(lái)看看詳細(xì)內(nèi)容吧,需要的朋友可以參考一下
    2021-12-12
  • OpenCV選擇圖像中矩形區(qū)域并保存

    OpenCV選擇圖像中矩形區(qū)域并保存

    這篇文章主要為大家詳細(xì)介紹了OpenCV選擇圖像中矩形區(qū)域并保存的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++ Custom Control控件向父窗體發(fā)送對(duì)應(yīng)的消息

    C++ Custom Control控件向父窗體發(fā)送對(duì)應(yīng)的消息

    這篇文章主要介紹了C++ Custom Control控件向父窗體發(fā)送對(duì)應(yīng)的消息的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C++開(kāi)發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化

    C++開(kāi)發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化

    這篇文章主要介紹了C++開(kāi)發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化方法的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • C++傳值、傳址、傳引用的區(qū)別和選擇小結(jié)

    C++傳值、傳址、傳引用的區(qū)別和選擇小結(jié)

    參數(shù)傳遞有傳值、傳址和傳引用這三種,本文主要介紹了C++傳值、傳址、傳引用的區(qū)別和選擇小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • C++菱形繼承和虛繼承的實(shí)現(xiàn)

    C++菱形繼承和虛繼承的實(shí)現(xiàn)

    本文主要介紹了C++菱形繼承和虛繼承的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論