您好,登錄后才能下訂單哦!
這篇文章主要介紹“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 natural
void 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 natural
vector<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();
通常的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í)用的文章!
免責(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)容。