Lambda表达式是一种匿名函数,可以用来很方便快速的声明实现函数
下面是Lambda表达式的最常见简单的构造:
[捕获变量](参数列表){
函数体;
};
捕获的变量名需要和前面的声明一致,并使用&可按引用捕获变量,引用捕获&可在lambda内部修改变量的值,而按值捕获变量则不能;当置空时,默认不捕获任何变量;若是[&]和[=]则默认捕获所有变量
参数列表即传入的参数,和正常声明函数是一样的,可置空
函数体即实现代码,也是与普通函数是一样的
而函数返回类型是自动推导的
举两个例子:
int c=1,d=2;
auto lamb=[&c,d](int a,int b){ //捕获前面声明的c,d变量,并传入参数a,b
c=5; //c为按引用捕获,可修改,而d为按值捕获,不可修改
return a+b;
};
cout<<lamb(1,3)<<endl; //输出4
cout<<c<<" "<<d; //输出5 2
int c=1,d=2;
auto lamb=[&](){ //按引用捕获全部变量,不传入参数
c=5;
d=5;
return c+d;
};
cout<<lamb()<<endl; //输出10
cout<<c<<" "<<d; //输出5 5
再扩展一下,lambda表达式的完整结构应该是:
[捕获变量](参数列表)修饰符->返回类型{
函数体;
};
修饰符如mutable,可控制lambda行为,影响捕获变量的权限
返回类型可显式控制函数输出类型
举两个例子:
int c=1,d=2;
auto lamb=[=]()mutable{ //mutable允许在函数体内修改副本,不会影响外部
c=5;
d=5;
return c*d*1.1;
};
cout<<lamb()<<endl; //输出27.5
cout<<c<<" "<<d; //输出1 2
int c=1,d=2;
auto lamb=[&]()mutable->int{
c=5;
d=5;
return c*d*1.1;
};
cout<<lamb()<<endl; //输出27
cout<<c<<" "<<d;
评论前必须登录!
注册