日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++中Lambda表達(dá)式的快速指南

編程語言不斷發(fā)展,甚至像 C++ 這樣很久以前就確立了自己的語言。他們向標(biāo)準(zhǔn)庫添加功能并進(jìn)行其他更改以簡化程序員在動(dòng)態(tài)領(lǐng)域工作的工作。

創(chuàng)新互聯(lián)專注于石阡企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),購物商城網(wǎng)站建設(shè)。石阡網(wǎng)站建設(shè)公司,為石阡等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

作為語言演變帶來的更新的一部分,C++ 在其 2011 版本中增加了對(duì) lambda 表達(dá)式的支持。

什么是 lambda 表達(dá)式,作為 C++ 程序員,您如何利用它來發(fā)揮自己的優(yōu)勢?

什么是 Lambda 表達(dá)式?

lambda 表達(dá)式也稱為 lambda 函數(shù)。它是一個(gè)內(nèi)聯(lián)表達(dá)式,能夠接受參數(shù)、執(zhí)行操作和返回值,就像典型的函數(shù)一樣。

您可以在另一個(gè)函數(shù)中使用 lambda 并將其分配給變量。Lamba 函數(shù)是在程序中定義匿名函數(shù)對(duì)象的一種實(shí)用方法。幾乎每種語言都支持 lambda,盡管每種實(shí)現(xiàn)都各不相同。

C++ Lambda 表達(dá)式有哪些部分?

Lambda 表達(dá)式在 C++ 中很容易使用。您可以在 C++ 中分解 lambda 表達(dá)式的語法,如下所示:

[capture_clause](parameters) options { expression_body; }

例如:

int val = 13;
auto sumPlusVal = [val](int a, int b) mutable noexcept ->int { return val + a + b ; };
sumPlusVal(2, 5); // 20

這段代碼聲明了sumPlusVal變量 auto,因?yàn)?lambda 表達(dá)式可以接受和返回任何數(shù)據(jù)類型。這讓編譯器在編譯期間確定類型。

從上面的代碼中,您可以看到一個(gè) lambda 表達(dá)式包含幾個(gè)部分,這些部分指定了它的操作方式。以下是每個(gè)組件的快速概述。

  1. 捕獲子句(Capture Clause):這是 lambda 表達(dá)式的第一部分,您可以在其中指定預(yù)先存在的變量或定義要在表達(dá)式主體中使用的新變量。有不同的方法來指定捕獲,例如:
auto addTwo = [foo](){ return foo + 2; }; // by value
auto addThree = [&bar](){ return bar + 3; }; // by reference
auto addAllVal = [=](){ return foo + bar; }; // all by value
auto addAllRef = [&](){ return foo + bar; }; // all by reference
// create a variable in capture clause
auto createVarInCapture = [fooBar = foo + bar](){ return fooBar * 5; };
// no capture - returns error because foo is not accessible
auto errorExpression = [](){ return foo + 2; };
  1. 參數(shù)(Parameters):這部分 lambda 表達(dá)式也是可選的。它包含 lambda 所需的函數(shù)參數(shù)。這與您在 C++ 中定義函數(shù)參數(shù)的通常方式?jīng)]有任何不同。
  2. 選項(xiàng)(Options):您還可以在定義 lambda 表達(dá)式時(shí)指定選項(xiàng)。您可以使用的一些選項(xiàng)是:mutable、exception(例如第一個(gè)示例代碼中的noexcept )、 ->return_type(例如->int)、requires、attributes等。經(jīng)常使用mutable選項(xiàng),因?yàn)樗试S在內(nèi)部修改捕獲拉姆達(dá)。下面的代碼演示了這一點(diǎn)。
int value = 10;
// returns an error - value is a const inside the expression
auto decrement = [value](){ return --value; };
auto increment = [value]() mutable { return ++value; };
increment(); // 11
  1. 盡管其他選項(xiàng)很少使用,但您可以在cppreference.com的 lambdas 頁面上獲得有關(guān)它們的更多信息。
  2. 表達(dá)式主體(Expression body):這是 lambda 表達(dá)式的主體,它執(zhí)行并返回一個(gè)值,就像函數(shù)一樣。如有必要,您可以將 lambda 表達(dá)式的主體拆分為多行。但是,最好的做法是盡可能簡短,以防止代碼混亂。

Lambda 表達(dá)式有什么好處?

在代碼中使用 lambda 函數(shù)有很多優(yōu)點(diǎn)。除了提高開發(fā)速度和效率之外,您從 lambdas 獲得的最大好處如下:

  •  Lambda 表達(dá)式有助于保持代碼整潔。保持代碼簡單整潔的最佳方法之一是盡可能使用 lambda。這對(duì)于維護(hù)可讀和可重用的代碼結(jié)構(gòu)非常有幫助。
  •  您可以將 lambdas 作為參數(shù)傳遞給其他函數(shù)。C++ 標(biāo)準(zhǔn)庫的 std::sort() 方法利用了這一優(yōu)勢。您可以將 lambda 作為此方法的參數(shù)之一傳遞,以指定函數(shù)應(yīng)如何執(zhí)行排序。例如:
std::vector arr = {2, 5, 1, 3, 4};
std::sort(arr.begin(), arr.end(), [](int a, int b){ return a < b; });
// arr = {1, 2, 3, 4, 5}

  •  Lambda 是可重用的。有時(shí),您可能希望在程序中的函數(shù)范圍內(nèi)使代碼塊可重用,而不必定義新函數(shù)。在這種情況下,Lambda 非常有用。考慮以下可重用 lambda 表達(dá)式的示例:
#include 
using namespace std;
int main() {
// define a reusable lambda
auto addUp = [](auto a, auto b, auto c) noexcept {
cout << "Now adding up... " << a << ", " << b << " and " << c << endl;
return a + b + c ;
};
cout << addUp(22, 33, 44) << endl;
cout << addUp(string("Happy "), string("Birth"), string("day")) << endl;
cout << addUp(true, false, true) << std::endl; // executes as numbers(1 and 0)
}

該程序產(chǎn)生以下結(jié)果:

此示例演示了定義 lambda 是多么簡單,以便您可以將其與任何類型一起使用。

在 C++ 中使用 Lambda

lambda 表達(dá)式還有許多其他好處,隨著程序結(jié)構(gòu)變得越來越復(fù)雜,您會(huì)發(fā)現(xiàn)它們。事實(shí)上,C++ 程序員有時(shí)將 lambda 表達(dá)式稱為閉包,因?yàn)樗鼈兪窃诖a中實(shí)現(xiàn)閉包的好方法。

如果要將現(xiàn)代 C++ 概念合并到代碼庫中,則應(yīng)考慮使用 lambda 表達(dá)式。


當(dāng)前標(biāo)題:C++中Lambda表達(dá)式的快速指南
標(biāo)題路徑:http://www.dlmjj.cn/article/djiccpd.html