溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++什么時(shí)候使用lambda表達(dá)式

發(fā)布時(shí)間:2021-11-26 15:42:15 來源:億速云 閱讀:187 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“C++什么時(shí)候使用lambda表達(dá)式”,在日常操作中,相信很多人在C++什么時(shí)候使用lambda表達(dá)式問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C++什么時(shí)候使用lambda表達(dá)式”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

F.50:在不愿意使用函數(shù)時(shí)使用lambda表達(dá)式(例如讀取局部變量,訪問局部函數(shù))

Reason(原因)

函數(shù)無法使用函數(shù)體外部的局部變量,也不能定義在局部作用域;如果你需要這方面功能,如果可能的話使用lambda表達(dá)式是較好的選擇,否則需要自己實(shí)現(xiàn)函數(shù)對(duì)象。另一方面,lambda表達(dá)式和函數(shù)對(duì)象無法實(shí)現(xiàn)重載;如果你需要重載,函數(shù)更合適(通過折騰讓lambda表達(dá)式重載的方法太高級(jí))。如果兩種方式都可用,用函數(shù)更好;使用滿足需要的,最簡(jiǎn)單的工具。

Example(示例)

// writing a function that should only take an int or a string// -- overloading is naturalvoid f(int);void f(const string&);
// writing a function object that needs to capture local state and appear// at statement or expression scope -- a lambda is naturalvector<work> v = lots_of_work();for (int tasknum = 0; tasknum < max; ++tasknum) {    pool.run([=, &v]{        /*        ...        ... process 1 / max - th of v, the tasknum - th chunk        ...        */    });}pool.join();
Exception(例外)

通常的lambda表達(dá)式提供一種實(shí)現(xiàn)函數(shù)模板的簡(jiǎn)明方式,因此很有用;一個(gè)普通的函數(shù)模板想要做相同的事情甚至需要稍微復(fù)雜的語法。但是將來一旦所有的函數(shù)都可以擁有概念參數(shù),這個(gè)優(yōu)勢(shì)將來很可能會(huì)消失。

譯者注:Concept是C++20將會(huì)導(dǎo)入的新特性。

Enforcement(實(shí)施建議)

在使用了一個(gè)沒有獲取任何變量而且存在于全局作用域的、命名的非普通lambda表達(dá)式(例如auto x=[](int){/*...*/};)時(shí)報(bào)警。

到此,關(guān)于“C++什么時(shí)候使用lambda表達(dá)式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI