Lambda表達式(匿名函數)和爲什麼使用Lanbda表達式
1.什麼是Lambda表達式
名稱Lanbda來自landba caculus(λ演算)--一種定義和應用函數的數學系統。這個系統能讓您使用匿名函數--即無需給函數命名。在C++11中,對於接受函數指針或函數符的的函數,可使用匿名函數定義(lambda)作爲其參數。與前述函數f3對應的lambda如下:
bool f3(int x){return x%3==0;}(計算是否被3整除)
對應lambda表達式:
[](int x){return x%3==0;}
差別有兩個:使用[]替代了函數名(這就是匿名函數的由來);沒有聲明返回類型。返回類型相當於使用decltyp根據返回值推斷得到,這裏爲bool.如果lambda不包含返回語句,推斷出返回類型將爲void.就這個示例而言,你講以如下方式使用該lambda:
std::vector<int> numbers(1000);
count3=std::count_if(numbers.begin(),numbers.end(),[](int x ){return x% 3==0;})
(count_if()的前兩個參數對應指定區間,二第三個參數影視一個返回true或false的函數對象。函數count_if()返回爲true的次數)
也就是說,使用整個lambda表達式替換函數指針或函數符構造函數。
僅當lambda表達式完全由一條返回語句組成時,自動類型腿短才管用:否則,需要使用新增的返回類型後置語法:
[](double x)->double(int y=x;return x-y;)//返回類型爲double