云计算百科
云计算领域专业知识百科平台

Lambda表达式的规范与用法

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;

赞(0)
未经允许不得转载:网硕互联帮助中心 » Lambda表达式的规范与用法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!