基本构造
一般情况下,编译器可以自动推断出lambda表达式的返回类型,所以我们可以不指定返回类型
[捕获](参数){函数体}
捕获
可以捕捉lambda函数所在函数 的局部变量
值捕获
int c=1
auto show=[c](){
cout<<c<<endl;
}
show();
1
引用捕获
int c=1;
auto show=[&c]()
{
cout<<c<<endl;
c=2;
cout<<c<<endl;
}
show();
cout<<c<<endl;
1
2
2
可以发现已经改变局部变量的值
隐式捕获
[&] 自动捕获所有局部变量的引用
[=] 自动捕获所有局部变量的值
int c=1;
auto show=[&]()
{
cout<<c<<endl;
}
int c=1
auto show=[=](){
cout<<c<<endl;
}
show();
泛型lambda
参数中可以用auto, 实现泛型的效果。c++14后支持
auto add=[](auto a,auto b){ cout<<a+b<<endl;}
add(1,2);
add(1,2.3);
混合捕获
int a=1;
int b=2;
int c=3;
// 除了a用值捕获,其他都用引用传递
auto show=[&,=a]()
{
cout<<c<<endl;
}
// 除了a用引用捕获,其他都用值传递
auto show=[=,&a]()
{
cout<<c<<endl;
}
常用
[&](){
}
以上代表一个void 无参数 引用捕获所有外部变量的方式