lambda表示式可以用於簡潔的表達乙個函式,雖然不太會用,但是之後看**的時候可能會遇見,還是學習一下為妙。
c++11提供了對匿名函式的支援,匿名函式被稱為 lambda 函式,也可以被稱作lambda表示式。
具體的形式如下:
[capture]
(parameters)
mutable
->
return
-type
其中存在四個引數,分別是:
1、[capture] :capture是捕捉列表。捕捉列表是lambda表示式的開頭。
2、(parameters):parameters是引數列表。和c++中的普通函式引數意義一樣。
3、mutable:當我們在引數列表後面註明了「mutable」關鍵字之後,可以取消其const常量的性質。
4、->return-type:return-type是函式的返回值型別。和c/c++中的普通函式返回值型別的性質一樣。當不需要返回值時,可以去掉這一部分。
5、 :statement是函式體。是函式的具體執行過程。
#include
using
namespace std;
intmain()
; cout <<
sum(a,b)
<<
'\n'
;system
("pause");
return0;
}
結果為:
20
請按任意鍵繼續.
..
捕捉列表可以填入不同的值。
1、填入 = 時,代表通過值傳遞捕捉父作用域的變數
#include
using
namespace std;
intmain()
;//值傳遞捕捉父作用域變數
cout <<
fun1()
<<
'\n'
;system
("pause");
return0;
}
輸出為:
20
請按任意鍵繼續.
..
2、填入 & 時,代表通過引用傳遞捕捉父作用域的變數
#include
using
namespace std;
intmain()
;fun2(5
); cout <<
"a = "
<< a <<
" b = "
<< b << endl;
system
("pause");
return0;
}
結果為:
a =
5 b =
15請按任意鍵繼續.
..
3、填入[ = , &b ]時,代表除去b外,其他值以值傳遞的方式捕捉
以值傳遞捕捉的變數,在函式體裡如果要修改,要加mutaple,因為預設使用const修飾。
在本例中,a變數以值傳遞的方式捕捉,需要加上mutable才可以修改,否則會報錯。
#include
using
namespace std;
intmain()
;//以值傳遞捕捉的變數,在函式體裡如果要修改,要加mutaple,因為預設const修飾
fun3(3
);cout <<
"a = "
<< a <<
" b = "
<< b << endl;
system
("pause");
return0;
}
結果為:
a =
10 b =
15請按任意鍵繼續.
..
cpp教程10 C 中的lambda
看完c 中的lamda,感覺總體來說,不愧是 c 乙個lamda 都搞的可以玩出花來!下面我簡單介紹一下lamda表示式在 c 中的語法。作為乙個從 python 來的 c 人,我被c 的lamda 震驚了。以開頭,lambda 語法可以生成乙個臨時的或者說匿名的函式物件,因此可以方便的支援函式式程...
C 的使用小教程8 多型與介面
學習好幸苦。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。介面描述了類的行為和功能,而不需要完成類的特定實現。通過多型與介面的配合,可以使得c 中同乙個函式在派生類與基類中實現方式不同,假設我們有乙個名為shape的類,circle和rectangle都是它的派生類,ci...
C 的使用小教程2 基於範圍的for迴圈
在學習了python之後,一直覺得python的語法很方便,特別是python中遍歷陣列的方式,無需配置特別的引數就可以完全遍歷,c語言是很難實現的,不過我發現c 中有對應的函式可以實現。c 中正常的for迴圈演算法如下所示 for init condition increment 其中init用於...