定义形式
[外部变量访问方式说明符] (参数表)->返回值类型
{
语句组
}
外部变量访问方式说明符可以是=或&.
表示语句组中用到的,定义在{}外面的变量在{}是否允许被改变.
=表示不允许.
&表示允许
->返回值类型可以省略
例子
int a[4]={12,237,6};
sort(a,a+4,[=](int x,int y)->bool{return x%10<y%10;});
for_each(a,a+4,[=](int x){cout<<x<<" ";})
上面一段代码中有两个lambda表达式
第一个表达式定义了sort的排序规则:即将a数组按照个位数从小到大排序.
第二个表达式省略了->返回值类型,只用于顺序输出元素.
写一个获得两者最大值的lambda表达式.
auto getmax=[&](auto x,auto y){
return max(x,y);
};
外部变量访问方式说明符的变式
1.
[
=
,
&
x
,
&
y
]
1.[=,\&x,\&y]
1.[=,&x,&y]表明外部变量
x
x
x,
y
y
y的值可以修改,其他外部变量的值不能修改.
2.
[
&
,
x
,
y
]
2.[\&,x,y]
2.[&,x,y]表示除
x
,
y
x,y
x,y以外的外部变量都可以修改.
auto关键字
In C++14, if the parameter type is generic, you can use the auto keyword as the type specifier. This keyword tells the compiler to create the function call operator as a template. Each instance of auto in a parameter list is equivalent to a distinct type parameter.
以auto关键字修饰返回值,可以告诉编译器以模板形式创建该函数的调用.
auto y = [] (auto first, auto second)
{
return first + second;
};
自动推导注意事项
当且仅当lambda表达式完全由一条返回语句组成时,自动类型推导才管用,否则需要使用新的返回类型后置语法:
[](double x)->double{int y=x;return x-y;}