Lambda表達式C++11

一、Lambda表達式是什麼

Lambda表達式是一種C++11新特性,可以用於創建匿名函數,類似於函數指針,但更加靈活和方便。Lambda表達式以一個包含形參列表和函數體的小括號內開頭,後續跟着函數體,函數體可以是任意的有效的C++語句塊。Lambda表達式可以訪問外部作用域中的變量,這些變量可以被捕獲並綁定到Lambda表達式的形參中。


auto sum = [] (int a, int b) -> int {
    return a + b;
};
cout << sum(1, 2) << endl;

上述Lambda表達式用於計算兩個整數的和,使用auto關鍵字進行類型推導,使用[]表示沒有捕獲任何外部變量,括號內的int a, int b是Lambda表達式的形參列表,-> int是返回類型。

二、Lambda表達式的使用場景

Lambda表達式可以在很多場景下使用,比如常用的算法函數std::sortstd::for_each,可以使用Lambda表達式來自定義排序或者對元素進行處理。


// 使用Lambda表達式對容器進行排序
std::vector<int> vec = {23, 56, 12, 9, 62};
std::sort(vec.begin(), vec.end(), [] (int a, int b) {
    return a < b;
});

// 使用Lambda表達式遍歷容器並輸出
std::vector<int> vec = {23, 56, 12, 9, 62};
std::for_each(vec.begin(), vec.end(), [] (int a) {
    std::cout << a << " ";
});

上述代碼中,第一個Lambda表達式用於對vec進行排序,括號內的int a, int b表示Lambda表達式的兩個形參,a < b表示排序規則。第二個Lambda表達式用於遍歷容器vec,括號內的int a表示遍歷的元素,std::cout << a << " "表示對元素的處理。

三、Lambda表達式的捕獲方式

Lambda表達式可以捕獲外部作用域中的變量,並綁定到Lambda表達式的形參中。Lambda表達式可以採用三種捕獲方式:

  • 值捕獲:以=開頭,表示以值的方式將變量綁定到形參中。
  • 引用捕獲:以&開頭,表示以引用的方式將變量綁定到形參中。
  • 混合捕獲:同時使用=&,表示以值的方式將除指定變量外的所有變量綁定到形參中,以引用的方式將指定變量綁定到形參中。

// 值捕獲示例
int a = 1, b = 2, c = 3;
auto func1 = [a, b] () {
    std::cout << "a = " << a << ", b = " << b << std::endl;
};
func1();

// 引用捕獲示例
int a = 1, b = 2, c = 3;
auto func2 = [&a, &b] () {
    a = 4;
    b = 5;
};
func2();
std::cout << "a = " << a << ", b = " << b << std::endl;

// 混合捕獲示例
int a = 1, b = 2, c = 3;
auto func3 = [=, &a] () {
    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
};
func3();

上述代碼中,func1使用值捕獲方式,捕獲變量abfunc2使用引用捕獲方式,引用變量ab,在func2中修改了變量ab的值,輸出後發現變量ab的值已經修改。func3使用混合捕獲方式,以值的方式捕獲變量bc,以引用的方式捕獲變量a,在Lambda表達式中使用了所有捕獲的變量。

四、Lambda表達式的返回值

Lambda表達式可以有返回值,返回值類型可以使用auto進行類型推導,也可以使用-> 返回類型進行指定。Lambda表達式的返回值使用return語句來返回。


// Lambda表達式的返回值示例
auto func = [] (int a, int b) -> int {
    return a + b;
};
std::cout << func(1, 2) << std::endl;

上述代碼中,Lambda表達式使用-> int來指定返回類型為int,使用return語句返回兩個整數的和。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/229004.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 12:09
下一篇 2024-12-10 12:09

相關推薦

  • 掌握lambda排序

    一、Lambda表達式簡介 Lambda表達式(又稱為函數式接口)為Java 8新增的一個功能,可使代碼更加簡潔。Lambda表達式的作用是向方法傳遞一個代碼塊,從而使代碼更加具有…

    編程 2025-04-23
  • 關係表達式的深度剖析

    一、關係表達式的定義 關係表達式是指在關係數據庫中為實現數據的最大效用和最快速度的數據檢索和存儲而定義的語法,表達式中的每一個元素(關係、屬性、常量等)均是數據庫的基本結構。 二、…

    編程 2025-04-23
  • lambda遍歷map詳解

    一、基礎概念 1、lambda表達式的含義 lambda:arguemts:expression 其中,arguments表示lambda表達式的參數列表,expression則表…

    編程 2025-04-22
  • Java二元表達式:從基礎到優化

    一、基礎知識 Java二元表達式是指只有兩個操作數以及一個運算符的表達式,例如1+2、a<b或 x*y 。在Java語言中,對二元表達式的處理十分重要且廣泛,我們需要掌握基礎…

    編程 2025-04-18
  • 切面表達式:細節決定成敗

    一、切面表達式註解 註解是Java中非常重要的一種語法標記,Spring AOP中也通過註解的方式來定義切面。在定義切面時,可以使用@Aspect註解表示一個切面類,也可以使用@B…

    編程 2025-04-13
  • Cron表達式校驗詳解

    一、Cron表達式簡介 Cron表達式是一種時間計劃工具。它是由6或7個時間元素組成的字符串,用於指定時間表。 Cron觸發器通常用於調度任務或批處理作業。 Cron表達式是指定執…

    編程 2025-04-12
  • 深入探究cron表達式驗證

    一、驗證cron表達式的重要性 1、cron表達式是一個非常常見的工具,用於定義如何在特定的間隔進行重複運行作業以及何時啟動作業。 2、驗證cron表達式的正確性非常重要,可以確保…

    編程 2025-02-25
  • lambda 求和的使用詳解

    一、什麼是lambda函數 lambda函數也被稱為匿名函數,它是一種可以在代碼中直接定義的小函數。它可以被用於一些特殊場合,例如在函數中作為參數傳遞、在列表、字典或集合等數據結構…

    編程 2025-02-24
  • Java表達式的全面解析

    一、操作符和操作數 在Java中,表達式是由操作符和操作數組成的。操作符分為算術操作符、關係操作符、邏輯操作符和位操作符。操作數可以是常量、變量、方法調用或者其他表達式。 //算術…

    編程 2025-02-17
  • 深入了解execution表達式

    隨着Spring框架的不斷發展,execution表達式作為Spring AOP切點表達式的核心語法之一,也逐漸成為了Java開發人員必備的技能之一。execution表達式主要作…

    編程 2025-02-17

發表回復

登錄後才能評論