lambda表達式
lambda表達式是c++11中的一個語法糖,是c++ 11最重要也最常用的一個特性之一。
lambda表達式優點:
聲明編程風格:就地匿名定義目標函數或函數對象,不需要額外寫一個命名函數或者函數對象,以一個更直接的方式去寫程序,好的可讀性和可維護性。
簡潔:不需要額外再寫一個函數或者函數對象,避免代碼膨脹和功能分散,讓開發者更加幾種經理在手邊的問題,獲取了更高的生產率。
在需要的時間地點實現功能閉包,程序顯得更加靈活。
lambda表達式概念用法
lambda表達式定義了一個匿名函數,並且可以捕獲一定范圍內的變量。
[capture](params)opt->ret{body;};
capture是捕獲列表,params是參數表 ,opt是函數選項,ret是返回值類型,body是函數體
鏈接:http://c.biancheng.net/view/3741.html
lambda表達式可以通過捕獲列表捕獲一定范圍內的變量:
[]不捕獲任何變量
[&]捕獲外部作用域中所有變量,並作為引用在函數體中使用(按引用捕獲)
[=]捕獲外部作用域中所有變量,並作為副本在函數體中使用(按值捕獲)
[=,&foo]按值捕獲外部作用域中所有變量,1並按引用捕獲foo變量
[bar]按值捕獲bar變量,不捕獲其他變量
[this]捕獲當前類中的this指針,讓lambda表達式擁有和當前類成員函數同樣的訪問權限,如果已經使用了&或者=,就默認添加此選項,捕獲this的目的是可以在lambda中使用當前類的成員函數和成員變量.
typedef std::function<void(int ,int)>fn;
void my_recv(int i,int size fn f1){
}
my_recv(2,5,[&}(int x,int c){
cout<<x+c;
cout<<endl;});