本文章只提供快速入門教程,旨在幫助新手們(包括我自己)快速入門乙個相關知識,不包含詳細的知識點以及高階的技術用法。如有需要,可自行查詢更加詳細的資料。
lambda表示式定義了乙個匿名函式,可以用來替代普通函式。
作者認為lambda表示式只適用於簡單、短小的函式,如果函式邏輯比較複雜,最好還是定義乙個函式來實現功能比較好,否則會影響程式的可讀性。
[ capture ]
( params ) opt -
> ret
;
其中capture
是捕獲列表,params
是輸入引數列表,opt
是函式選項,ret
是返回值型別,body
是函式體
詳細可以看參考鏈結2:微軟c++語言參考這裡我們有乙個普通寫法的函式:
std::string func_1
(int a)
它的lambda表示式為:
(
int a)
-> std::string
#include
#include
std::string func_1
(int a)
;int
main
(int argc,
char
* ar**)
; std::cout <<
"普通函式輸入的是: "
<<
func_1(2
)<< std::endl;
std::cout <<
"lambda輸入的是: "
<<
func_2(2
)<< std::endl;
return exit_success;
}std::string func_1
(int a)
其輸出結果為:
普通函式輸入的是: 2
lambda輸入的是: 2
捕獲列表的型別:
寫法含義
不捕獲任何變數
[&]按引用
捕獲所有變數
[=]按值
捕獲所有變數
[=, &a]
按引用捕獲變數a,然後按值捕獲其他變數
[b]只按值捕獲變數b,不再捕獲其他變數
int a =
0, b =1;
auto f1 =
;// error,沒有捕獲外部變數
auto f2 =[&
];// ok,捕獲所有外部變數,並對a執行自加運算
auto f3 =[=
];// ok,捕獲所有外部變數,並返回a
auto f4 =[=
];// error,a是以複製方式捕獲的,無法修改
auto f5 =
[a];
// error,沒有捕獲變數b
auto f6 =
[a,&b]
;// ok,捕獲a和b的引用,並對b做自加運算
auto f7 =[=
,&b]
;// ok,捕獲所有外部變數和b的引用,並對b做自加運算
c語言中文網:
微軟c++語言參考:
3分鐘理解Lambda表示式
原文 3分鐘理解lambda表示式 1.什麼是lambda表示式 lambda表示式是乙個匿名方法,通常在linq中被用來建立委託 簡單來說。它是乙個沒有宣告,沒有訪問修飾符,沒有返回值。甚至沒有名字的方法。2.為什麼我們需要使用lambda表示式?或者說為什麼我們要寫乙個沒有名字的函式?為了方便,...
正規表示式30分鐘入門筆記
1 b是正規表示式規定的乙個元字元,代表著單詞的開頭或結尾,也就是單詞的分界處。如果要精確地查詢hi這個單詞的話,我們應該使用 bhi b 2 是另乙個元字元,匹配除了換行符以外的任意字元 3 同樣是元字元,它代表的不是字元,也不是位置,而是數量 它指定 前邊的內容可以連續重複使用任意次以使整個表示...
lambda表示式入門
使用lambda表示式的條件 必須是函式式介面 什麼是函式式介面?簡單來說,就是乙個有且僅有乙個抽象方法,但是可以有多個非抽象方法的介面。inte ce animal 通過 方式一步一步推導出lambda表示式如何簡化來的 public class demo01 public static void...