lambda名稱來自lambda calculus,是一種使用匿名函式來定義和使用函式的數學系統。當某些函式比較簡單,只是臨時使用一下,便可以使用lambda表示式。
1.定義及使用
例如:(int x); bool f3(int x);
上面乙個是lambda表示式,乙個是函式,可以看出,代替了函式名,lambda表示式沒有返回值,系統通過推斷來判斷返回值的型別,不含返回值時,推斷為void型。
同樣可以定義有名稱的lambda表示式:
auto mod3=(int x)
bool result=mod3(x);
2.額外功能.
[capture](parameters) mutable ->return-type
(1)捕獲列表[capture]
出現在lambda表示式的起始處,是lambda表示式的引出符,編譯器根據此符判斷是否為lambda函式,捕獲列表可以將上下文中的變數捕獲以供lambda函式使用。
①[var]表示值傳遞方式捕捉變數var;
②[=]表示值傳遞方式捕捉所有父作用域的變數(包括this);
③[var]表示引用傳遞捕捉變數var;
思[&]表示引用傳遞方式捕捉所有父作用域的變數(包括this);
⑤[this]表示值傳遞方式捕捉當前的this指標。
上面提到了乙個父作用域,也就是包含lambda函式的語句塊,說通俗點就是包含lambda的「{}」**塊。上面的捕捉列表還可以進行組合,例如:
⑥[=,&a,&b]表示以引用傳遞的方式捕捉變數a和b,以值傳遞方式捕捉其它所有變數;
⑦[&,a,this]表示以值傳遞的方式捕捉變數a和this,引用傳遞方式捕捉其它所有變數。 不過值得注意的是,捕捉列表不允許變數重複傳遞。
⑧[=,a]這裡已經以值傳遞方式捕捉了所有變數,但是重複捕捉a了,會報錯的。
⑨[&,&this]這裡&已經以引用傳遞方式捕捉了所有變數,再捕捉this也是一種重複。
(2)引數列表(parameters)
類似於函式的引數列表,可供表示式使用。
(3)mutable修飾符
預設情況下,lambda函式總是乙個const函式,mutable可以取消其常量性。在使用該修飾符時,引數列表不可省略(即使引數為空)。
(4)返回型別->return-type
用追蹤返回型別形式宣告函式的返回型別。我們可以在不需要返回值的時候也可以連同符號」->」一起省略。此外,在返回型別明確的情況下,也可以省略該部分,讓編譯器對返回型別進行推導。
(5)函式體
內容與普通函式一樣,不過除了可以使用引數之外,還可以使用所有捕獲的變數
簡單例子:
源**:
int count13;
count13=std::count_if(numbers.begin(),numbers.end(),(int x));
替換**:
int count13=0;
std::for_each(numbers.begin(),numbers.end(),[&count13](int x));
參考資料: lambda表示式 lambda表示式
1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...
python函式 Lambda表示式
函式 定義乙個函式 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。函式的第一行語句可以選擇性地使用文件字串 用於存放函式說明。函式內容以冒號起始,並且縮排。return 表示式 結束函式,選擇性地返回乙個值給呼叫方。不帶表示式的return相當於返回 none。2.語法 pyt...
函式與lambda表示式
lambda表示式是python中一類特殊的定義函式的形式,使用它可以定義乙個匿名函式。與其它語言不同,python的lambda表示式的函式體只能有單獨的一條語句,也就是返回值表示式語句。其語法如下 lambda 形參列表 函式返回值表示式語句 常規函式 def comp x return x a...