// capture_list:捕获外部变量列表
// params_list:形参列表
// mutable:是否可以修改捕获的变量
// exception:异常设定
// return_type:返回类型
// function_body:函数体
[capture_list] (params_list) mutable exception-> return_type {
function_body;
}
//声明了const类型的表达式,不能修改捕获列表中的值
[capture_list] (params_list)-> return_type {
function_body;
}
//省略了返回值类型,但编译器可以根据以下规则推断出Lambda表达式的返回类型:
//(1)如果存在return语句,则返回类型由return语句的返回值类型确定;(2)如果没有return语句,则返回值为void类型
[capture_list] (params_list) {
function_body;
}
//省略了参数列表,类似于普通函数的无参函数
[capture_list] {
function_body;
}
//以下两种方式是值传递
int a = 123;
//值捕获
auto f = [a]{cout << a << endl;}
//函数体后面的()传入参数
auto f = [](int a){cout << a << endl;}(123);
//引用捕获
auto f = [&a]{cout << a << endl;};
//隐式捕获
auto f = [=] {cout << a << endl;};
//隐式引用捕获
auto f = [&] {cout << a << endl;};
//修改捕获变量
auto f = [a]()mutable {cout << ++a; };
//Lambda表达式的参数:1.参数列表中不能有默认参数 2.不支持可变参数 3.所有参数必须有参数名