lambda表达式,这样理解更容易

前言

见到lambda表达式,你觉得又熟悉又陌生,不知道它到底有什么特殊的意义呢?

lambda

我们来看一下书写方式:

int count(0);
[&count](int x){
	count+=(x%13==0);
}

int m(10);
if([](m) {return m%3==0;})
	...
else
	...

我们只是定义了一个lambda表达式,可以看到它并没有名字,当然也是可以加名字的,后面会提到;

有两个参数:x、count
有两个括号:[]、()
中括号内书写引用参数,小括号内书写普通形参;

和普通定义方式的区别

这一部分我们可以不必纠结,他就是像上面那样定义的:
没有返回类型;
没有函数名;
出现了[ ]这个符号;

特殊之处:
1、需要加返回类型的情况:
上面我们写的第一个式子是没有返回值的,会自动推断返回void
      第二个式子有返回值,也会自动推断返回bool;

自动类型推断并不是适用任何情况:语句并不是只有一条返回语句组成时
像这个:

[] (double x) ->double{
	int y=x;
 	return x-y;
 }

这时就像上面那样需要添加->double,这也是C++11新增的返回类型后置语法。

为何使用lambda表达式

1、lambda可以直接定义并使用在需要使用的地方,而函数通常必须定义在外面,因为函数内部无法定义函数,当修改时可能需要翻阅多页代码去寻找它;
2、lambda表达式可以起名
下面的代码是重复的:

count1=std::count_if(n1.begin(),n1.end(),[](int x){return x%3==0;});
count2=std::count_if(n1.begin(),n1.end(),[](int x){return x%3==0;});

可以这样起名和使用:

auto mod3=[](int x){return x%3==0;};
count1=std::count_if(n1.begin(),n1.end(),mod3);
count2=std::count_if(n1.begin(),n1.end(),mod3);
bool result=mod3(z);

并且编译器通常不会阻止lambda表达式的内联;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值