lambda表达式的使用

有些时候,我们只需要在一两个地方使用到一些简单的操作,而又不想去定义这个函数名,那么此时便可以Lambda表达式来实现我们的功能。

一个完整的lambda表达式的表达形式如下:

[capture list](parameter list)->return type (function body)

[捕获列表] (参数列表) ->返回类型 (函数体)
Lambda表达式的参数列表和返回类型是和可以忽略的,但是捕获列表和函数体一定要包含。

对于Lambda表达式,我们可以将它理解为一个未命名的内联函数。

在Lambda表达式的函数体内,是不能够访问到外部的变量的,如果想要使用函数体外定义的变量,就需要将它们进行捕获。

[]:空捕获列表,即lambda表达式不能够使用所在函数中的变量

[]:值捕获,即lambda表达式可以以拷贝的方式访问到函数中变量的值(实际上是[=],前面是格式问题),使用拷贝方式不会改变外部变量

[]:引用捕获,即lambda表达式中所使用的其所在函数中的变量均是引用方式(实际上是[&]),使用引用方式会改变变量的值,引用捕获可以使用lambda所在函数体的变量,也可以使用类的成员

当我们不希望在捕获的时候将所有的变量都捕获的时候,我们可以使用如下的方式进行捕获,例如:

[=sprite1,&sprite2]

这里我们仅仅捕获了两个变量,第一个变量是以值拷贝的方式捕获,第二个是以引用方式捕获,变量与变量之间用逗号分隔。

正常情况下,如果一个变量是值拷贝,Lambda不能改变它的值,如果我们希望改变一个值拷贝的变量的值,就需要在参数列表前加上关键字mutable

例如:
auto s1=10;

auto s2==s1{return ++s1};//错误,因为s1是值拷贝,不能改变s1的值

auto s2==s1 mutable {return ++s1};//正确

2.(参数列表)

Lambda表达式传递参数时需要注意的是,Lambda表达式不能有默认参数,也就是说Lambda表达式的实参数与形参数必须相等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值