日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導(dǎo)讀]C++11終于知道要在語言中加入匿名函數(shù)了。匿名函數(shù)在很多時候可以為編碼提供便利,這在下文會提到。很多語言中的匿名函數(shù),如C++,都是用Lambda表達式實現(xiàn)的。Lambda表達式又稱為lambda函

C++11終于知道要在語言中加入匿名函數(shù)了。匿名函數(shù)在很多時候可以為編碼提供便利,這在下文會提到。很多語言中的匿名函數(shù),如C++,都是用Lambda表達式實現(xiàn)的。Lambda表達式又稱為lambda函數(shù)。我在下文中稱之為Lambda函數(shù)。

為了明白Lambda函數(shù)的用處,請務(wù)必先搞明白C++中的自動類型推斷:http://www.linuxidc.com/Linux/2013-12/93369.htm

基本的Lambda函數(shù)

我們可以這樣定義一個Lambda函數(shù):

#include

using namespace std;

int main()
{
? ? auto func = [] () { cout << "Hello world"; };
? ? func(); // now call the function
}

其中func就是一個lambda函數(shù)。我們使用auto來自動獲取func的類型,這個非常重要。定義好lambda函數(shù)之后,就可以當這場函數(shù)來使用了。

其中 [ ] 表示接下來開始定義lambda函數(shù),中括號中間有可能還會填參數(shù),這在后面介紹。之后的()填寫的是lambda函數(shù)的參數(shù)列表{}中間就是函數(shù)體了。

正常情況下,只要函數(shù)體中所有return都是同一個類型的話,編譯器就會自行判斷函數(shù)的返回類型。也可以顯示地指定lambda函數(shù)的返回類型。這個需要用到函數(shù)返回值后置的功能,比如這個例子:

[] () -> int { return 1; }

所以總的來說lambda函數(shù)的形式就是:

[captures] (params) -> ret {Statments;}

Lambda函數(shù)的用處

假設(shè)你設(shè)計了一個地址簿的類?,F(xiàn)在你要提供函數(shù)查詢這個地址簿,可能根據(jù)姓名查詢,可能根據(jù)地址查詢,還有可能兩者結(jié)合。要是你為這些情況都寫個函數(shù),那么你一定就跪了。所以你應(yīng)該提供一個接口,能方便地讓用戶自定義自己的查詢方式。在這里可以使用lambda函數(shù)來實現(xiàn)這個功能。

#include

class AddressBook
{
? ? public:
? ? // using a template allows us to ignore the differences between functors, function pointers?
? ? // and lambda
? ? template

? ? private:
? ? std::vector

從上面代碼可以看到,findMatchingAddressses函數(shù)提供的參數(shù)是Func類型,這是一個泛型類型。在使用過程中應(yīng)該傳入一個函數(shù),然后分別對地址簿中每一個entry執(zhí)行這個函數(shù),如果返回值為真那么表明這個entry符合使用者的篩選要求,那么就應(yīng)該放入結(jié)果當中。那么這個Func類型的參數(shù)如何傳入呢?

AddressBook global_address_book;

vector

可以看到,我們在調(diào)用函數(shù)的時候直接定義了一個lambda函數(shù)。參數(shù)類型是

const string& addr

返回值是bool類型。

如果用戶要使用不同的方式查詢的話,只要定義不同的lambda函數(shù)就可以了。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

c++程序員面試過程中基本上都會被問到c++11新特性吧,你是怎么回答的呢? 本文基本上涵蓋了c++11的所有新特性,并有詳細代碼介紹其用法,對關(guān)鍵知識點做了深入分析,對重要的知識點我單獨寫了相關(guān)文章并附上了相關(guān)鏈接,我...

關(guān)鍵字: c++11

很多人談到c++,說它特別難,可能有一部分就是因為c++的內(nèi)存管理吧,不像java那樣有虛擬機動態(tài)的管理內(nèi)存,在程序運行過程中可能就會出現(xiàn)內(nèi)存泄漏,然而這種問題其實都可以通過c++11引入的智能指針來解決,相反我還認為這...

關(guān)鍵字: c++11

c++11關(guān)于并發(fā)引入了好多好東西,這里按照如下順序介紹: std::thread相關(guān) std::mutex相關(guān) std::lock相關(guān) std::atomic相關(guān) std::call_once相關(guān) volatile相關(guān)...

關(guān)鍵字: 線程 c++11

以前,在lambda表達式?jīng)]有進入標準的時候,對容器的遍歷等涉及到使用函數(shù)指針的情況,一般人會懶得使用std::for_each,或std::transform,也許只是一個短短的幾句話,卻要單獨寫個

關(guān)鍵字: c++ c++11

emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作構(gòu)造而不是拷貝元素到容器中,這些操作分別對應(yīng)push_front、

關(guān)鍵字: c++11 emplace

const引用在C++語言中,引用是作為一種高效,安全的傳遞數(shù)據(jù)的方式而存在的。除了一般的引用類型,還可以聲明const引用。我們有以下一個Image類。class?Image { public: ?

關(guān)鍵字: c++11 const引用 右值引用

讓我們從std::make_unique和std::make_shared之間的比較開始講起吧。std::make_shared是C++11的一部分,可惜的是,std::make_unique不是,它

關(guān)鍵字: c++ c++11

為什么需要別名下面的說明只是一個例子,實際的使用場景一定不止這些。假設(shè)有一個二維圖形計算的程序,定義了一個point結(jié)構(gòu)體。struct?point{???int?x;???int?y;};在有些系統(tǒng)

關(guān)鍵字: c++11 類型別名

熟悉C++98/03的對于for循環(huán)就再了解不過了,如果我們要遍歷一個數(shù)組,那么在C++98/03中的實現(xiàn)方式:int?arr[10]?=?{?1,?2,?3,?4,?5,?6,?7,?8,?9,?1

關(guān)鍵字: c++ c++11

C++11的一大亮點就是引入了Lambda表達式。利用Lambda表達式,可以方便的定義和創(chuàng)建匿名函數(shù)。對于C++這門語言來說來說,“Lambda表達式”或“匿名函數(shù)”這些概念聽起來好像很深奧,但很多

關(guān)鍵字: c++11 lambda表達式 匿名函數(shù)
關(guān)閉