一、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;