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表示式不會引發任何異常。
lambda函式體#include
using
namespace
std;
int main() catch (int ex)();
} catch (int ex); // 正確
auto x2 = ; }; // 錯誤
lambda表示式的lambda體可包含普通方法或函式的主體可包含的任何內容。例如,可以直接訪問儲存在全域性資料區的變數,而不需要通過capture子句。
參考鏈結c++ 中的 lambda 表示式void fillvector(vector
& v) );
}
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表示式的時候,可以忽略引數列表和返回值型別,但是前後的捕獲列表和函式體必須...