Lambda of c++11
1.完整声明
[捕获外部变量](形参列表) 异常设定 ->返回类型{函数体}
2.例子
int a = 123;
auto f = [a] { cout << a << endl; };
f(); // 输出:123
//或通过“函数体”后面的‘()’传入参数
auto x = [](int a){cout << a << endl;}(123);
3.具体讲解
auto f = [&a] { cout << a << endl; };
/*
*[]不捕获任何外部变量
*[变量名, …]默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符)
*[this]以值的形式捕获this指针
*[=]以值的形式捕获所有外部变量
*[&]以引用形式捕获所有外部变量
*[=, &x]变量x以引用形式捕获,其余变量以传值形式捕获
*[&, x]变量x以值的形式捕获,其余变量以引用形式捕获
*/
int m = [](int x) { return [](int y) { return y * 2; }(x)+6; }(5);
std::cout << "m:" << m << std::endl; //输出m:16
auto gFunc = [](int x) -> function<int(int)> { return [=](int y) { return x + y; }; };
auto lFunc = gFunc(4);
std::cout << lFunc(5) << std::endl;
auto hFunc = [](const function<int(int)>& f, int z) { return f(z) + 1; };
auto a = hFunc(gFunc(7), 8);
int a = 111, b = 222;
auto func = [=, &b]()mutable { a = 22; b = 333; std::cout << "a:" << a << " b:" << b << std::endl; };
func();
std::cout << "a:" << a << " b:" << b << std::endl;