成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++ 中 Lambda 表達式的快速指南

開發 后端
作為語言演變帶來的更新的一部分,C++ 在其 2011 版本中增加了對 lambda 表達式的支持。

編程語言不斷發展,甚至像 C++ 這樣很久以前就確立了自己的語言。他們向標準庫添加功能并進行其他更改以簡化程序員在動態領域工作的工作。

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

什么是 lambda 表達式,作為 C++ 程序員,您如何利用它來發揮自己的優勢?

什么是 Lambda 表達式?

lambda 表達式也稱為 lambda 函數。它是一個內聯表達式,能夠接受參數、執行操作和返回值,就像典型的函數一樣。

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

C++ Lambda 表達式有哪些部分?

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

[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,因為 lambda 表達式可以接受和返回任何數據類型。這讓編譯器在編譯期間確定類型。

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

  1. 捕獲子句(Capture Clause):這是 lambda 表達式的第一部分,您可以在其中指定預先存在的變量或定義要在表達式主體中使用的新變量。有不同的方法來指定捕獲,例如:
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. 參數(Parameters):這部分 lambda 表達式也是可選的。它包含 lambda 所需的函數參數。這與您在 C++ 中定義函數參數的通常方式沒有任何不同。
  2. 選項(Options):您還可以在定義 lambda 表達式時指定選項。您可以使用的一些選項是:mutable、exception(例如第一個示例代碼中的noexcept )、 ->return_type(例如->int)、requires、attributes等。經常使用mutable選項,因為它允許在內部修改捕獲拉姆達。下面的代碼演示了這一點。
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. 盡管其他選項很少使用,但您可以在cppreference.com的 lambdas 頁面上獲得有關它們的更多信息。
  2. 表達式主體(Expression body):這是 lambda 表達式的主體,它執行并返回一個值,就像函數一樣。如有必要,您可以將 lambda 表達式的主體拆分為多行。但是,最好的做法是盡可能簡短,以防止代碼混亂。

Lambda 表達式有什么好處?

在代碼中使用 lambda 函數有很多優點。除了提高開發速度和效率之外,您從 lambdas 獲得的最大好處如下:

  •  Lambda 表達式有助于保持代碼整潔。保持代碼簡單整潔的最佳方法之一是盡可能使用 lambda。這對于維護可讀和可重用的代碼結構非常有幫助。
  •  您可以將 lambdas 作為參數傳遞給其他函數。C++ 標準庫的 std::sort() 方法利用了這一優勢。您可以將 lambda 作為此方法的參數之一傳遞,以指定函數應如何執行排序。例如:
std::vector<int> 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 是可重用的。有時,您可能希望在程序中的函數范圍內使代碼塊可重用,而不必定義新函數。在這種情況下,Lambda 非常有用。考慮以下可重用 lambda 表達式的示例:
#include <iostream>
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)
}

該程序產生以下結果:

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

在 C++ 中使用 Lambda

lambda 表達式還有許多其他好處,隨著程序結構變得越來越復雜,您會發現它們。事實上,C++ 程序員有時將 lambda 表達式稱為閉包,因為它們是在代碼中實現閉包的好方法。

如果要將現代 C++ 概念合并到代碼庫中,則應考慮使用 lambda 表達式。

責任編輯:龐桂玉 來源: Linux公社
相關推薦

2020-10-16 06:40:25

C++匿名函數

2023-03-23 18:40:18

Lambda編程C++

2023-11-02 08:25:58

C++Lambda

2024-03-25 13:46:12

C#Lambda編程

2009-07-09 09:51:07

Lambda表達式C#

2023-09-25 13:28:14

C++Lambda

2009-07-01 09:56:10

C#3.0

2009-08-27 09:44:59

C# Lambda表達

2010-10-19 10:03:02

Lambda表達式

2023-12-13 10:12:40

Python函數lambda

2009-08-27 09:57:50

C# Lambda表達

2009-08-26 16:17:23

C# Lambda表達

2009-09-14 13:57:20

C# Lambda表達Lambda表達式

2012-06-26 10:03:58

JavaJava 8lambda

2021-08-31 07:19:41

Lambda表達式C#

2009-09-11 09:48:27

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2022-12-05 09:31:51

接口lambda表達式

2022-11-07 07:11:19

C#lambda函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品三区 | 91精产国品一二三区 | 一区二区三区免费 | 一区二区三区在线免费观看视频 | 99re6在线 | 亚洲成色777777在线观看影院 | 在线āv视频 | 国产精品国产a级 | 国产日韩欧美 | 一区在线观看 | 日韩高清电影 | 精品国产91久久久久久 | 国产精品欧美日韩 | 国产成人av在线播放 | 午夜亚洲 | 日日干日日 | 99久久久久 | 国产激情视频在线 | 国产精品大片 | 最近日韩中文字幕 | 精品欧美一区二区三区 | 国产精品一区二区欧美黑人喷潮水 | 国产亚洲成av人片在线观看桃 | 久久99国产精品 | 日韩成人 | 一区二区在线观看免费视频 | 欧美性乱 | 日韩成人免费在线视频 | 91久久国产 | а_天堂中文最新版地址 | 国产欧美日韩一区二区三区在线观看 | jlzzjlzz欧美大全 | 久草在线在线精品观看 | 麻豆视频在线免费观看 | 成人久久久 | 成人在线不卡 | 日本午夜一区 | 男女那个视频 | 亚洲精品久久久蜜桃网站 | 亚洲综合色 | 成人av久久|