Lambda expression:
[capture_list] (params_list) mutable exception-> return_type { function_body }
Capture list: 捕捉外部变量列表
Params list: 变量列表
mutable 指示符: 说明是否可以修改捕捉的变量
exception: 异常说明
return type: 返回类型
function body: 函数体
此外,我们还可以省略其中的某些成分来声明“不完整”的Lambda表达式,常见的有以下几种:
[capture_list] (params_list) -> return_type { function_body }
[capture_list] (params_list) { function_body }
[capture_list] { function_body }
int o = [] (int n) ->int { return n; }(2);
cout << o << endl;// 2
cout << [](int x,int y) { return x + y; }(2,3) << endl; // n: 5
int m = [](int x) {return [](int y) {return y * 2; }(x) +1; }(3);
cout << m << endl; // 7
auto gFunc = [](int x) ->function<int(int)> {return [=](int y) {return x + y; }; };
auto lFunc = gFunc(4);
std::cout << lFunc(5) <<endl; // 9
auto hFunc = [](constfunction<int(int)>& f,int z) { return f(z) +1; };
cout << hFunc(gFunc(7),8) << endl;// 16
int a = 11, b =22;
auto func = [=, &b]()mutable { a =111; b = 222;cout << "a:" << a <<" b:" << b << endl; };
func(); // a:111 b:222
cout << "a:" << a <<" b:" << b << endl;// a:11 b:222
auto func2 = [=, &a] { a = 111; cout << "a:" << a << " b:" << b << endl; };
func2(); // a:111 b:222