lambda表達式與回調函數


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;});



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM