關於匿名函數 lambda表達式

一、lambda表達式
ISO C++ 11 標準的一大亮點是引入Lambda表達式

[capture list] (parameter list)->return type { 
	function body
 }

註釋:
capture list   捕獲列表  
		[]  可以爲空; 
		[=] 定義在表達式{}外的變量,在表達式{}中爲只讀變量,不能對其進行修改。 
		[&] 定義在表達式{}外的變量,在表達式{}中爲可讀可修改變量。
		更加靈活的用法,訪問{}外的變量
		[=,&a,&b] 表示{}外部變量 a、b 的值可以被修改,其餘{}外部變量不能被修改; 
		[&,a,b]	表示除了{}外部變量 a、b 的值不能被修改,其餘{}外部變量可以被修改; 
		
parameter list 	匿名函數的參數列表 
return type		匿名函數的返回值類型
function body	函數體

列子:

int a[4] = {3, 2, 1, 4};
int t = 0, x=10,y=20,z=30;
sort(a, a+4, [=](int x, int y) -> bool { return x < y; } );	// 升序排序
for_each(a, a+4, [&](int x) {  t += x; cout << x << " ";} );	
cout << t <<  endl;

auto f = [=,&y,&z](int n)->int{
   y++;z++;
     return n*n;
 };
 cout << f(x) <<  endl;
 cout << y <<  endl;
 cout << z <<  endl;

 auto f1 = [&,y,z](){
     cout << y+z <<  endl;
     return f(x);
 };
 cout << f1() <<  endl;
 cout << y <<  endl;
 cout << z <<  endl;

 int (*fp)(int)=[](int a){return a;}; //不捕獲時纔可轉換爲函數指針
 cout << (*fp)(100)<<  endl;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章