语法格式:
[捕获列表](参数列表) -> 返回类型 {
函数体
}
// 当函数体内有多个返回值,必须指定返回类型
捕获列表
-
值捕获:[name] 被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝。
-
引用捕获:[&name] 保存的是引用,值会发生变化。
-
隐式捕获:lambda 表达式外部的变量都可以使用。
-
[&] 所有的外部变量都按引用传递给lambda使用
int c = 2; auto Add = [&](int a, int b)-> int { return a + b + c; }; c = 3; cout << Add(1, 2) << endl; // 6 = 1 + 2 + 3 -
[=] 所有的外部变量都按值传递给lambda使用
int c = 2; auto Add = [=](int a, int b)-> int { return a + b + c; }; c = 3; cout << Add(1, 2) << endl; // 5 = 1 + 2 + 2
-
-
空捕获列表:[]不能使用所在函数中的变量
int c = 2; auto Add = [=](int a, int b) -> int { return a + b + c; // error }; -
表达式捕获:C++14后支持捕获右值,允许捕获的成员用任意的表达式进行初始化,被声明的捕获变量类型会根据表达式进行判断
auto important = std::make_unique
(1); auto add = [v1 = 1, v2 = std::move(important)](int x, int y) -> int { return x + y + v1 + (*v2); }; cout << add(3,4) << endl; // 9 = 1 + 1 + 3 + 4 -
泛型lamda:C++14 后可以用 auto 实现意义上的泛型
auto add = [](auto x, auto y) { return x + y; };



