C 之lambda表示式

2021-08-04 07:48:03 字數 1854 閱讀 3511

lambda表示式的語法歸納如下:

capture子句(在 c++ 規範中也稱為 lambda 引導)

引數列表(可選)

可變規範(可選)

異常規範(可選)

尾隨返回型別(可選)

lambda函式體

capture子句

capture子句指定要捕獲的變數以及是通過值還是引用進行捕獲。有與號&字首的變數通過引用訪問,沒有該字首的變數通過值訪問。空capture子句指示 lambda 表示式的主體不訪問封閉範圍中的變數。

可以使用預設捕獲模式來指示如何捕獲lambda中引用的任何外部變數:[&]表示通過引用捕獲引用的所有變數,而[=]表示通過值捕獲它們。另外,可以使用預設捕獲模式,然後為特定變數顯式指定相反的模式。

[a,&b]   // a變數以值的方式唄捕獲,b以引用的方式**獲

[this] // 以值的方式捕獲this指標

[&] // 以引用的方式捕獲所有的外部自動變數

[=] // 以值的方式捕獲所有的外部自動變數

// 不捕獲外部的任何變數

[=,&a] // 按值捕獲外部作用域中所有變數,並按引用捕獲a變數。

引數列表

除了捕獲變數,lambda還可接受輸入引數。引數列表是可選的,它在大多數方面類似於函式的引數列表。

int y =  (int first, int second) ;
可變規範

通常,lambda的函式呼叫運算子為const-by-value,但對mutable關鍵字的使用可將其取消。它不會生成可變的資料成員。利用可變規範,lambda表示式的主體可以修改通過值捕獲的變數。

#include 

using

namespace

std;

int main() (4);

cout

<< m << " "

<< n << endl;

}

執行結果:

5 0
由於變數n是通過值捕獲的,因此在呼叫lambda表示式後,變數的值仍保持0不變。mutable規範允許在lambda中修改n

異常規範

可以使用throw()異常規範來指示lambda表示式不會引發任何異常。

#include 

using

namespace

std;

int main() catch (int ex)();

} catch (int ex); // 正確

auto x2 = ; }; // 錯誤

lambda函式體

lambda表示式的lambda體可包含普通方法或函式的主體可包含的任何內容。例如,可以直接訪問儲存在全域性資料區的變數,而不需要通過capture子句。

void fillvector(vector

& v) );

}

參考鏈結c++ 中的 lambda 表示式

c++11 學習筆記 lambda表示式

c++11 lambda 表示式解析

c 之Lambda 表示式

1.介紹 lambda 表示式 lambda expression 是乙個匿名函式,lambda 表示式基於數學中的 演算得名,直接對應於其中的 lambda 抽象 lambda abstraction 是乙個匿名函式,即沒有函式名的函式。lambda 表示式可以表示閉包 注意和數學傳統意義上的不同...

C 之Lambda表示式

c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別 可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 mutable ...

c 之lambda 表示式

也叫做lambda 函式,lambda 表示式的出現目的是為了提高編碼效率,但是它的語法卻顯得有點複雜。lambda表示式表示乙個可以執行的 單元,可以理解為乙個未命名的內聯函式。1.lambda表示式的語法在編寫lambda表示式的時候,可以忽略引數列表和返回值型別,但是前後的捕獲列表和函式體必須...