Lambda表达式

Lambda表达式

参考这个博主写的,这个博主讲得很详细,很nice!!!

1. 基本概念

在这里插入图片描述
Lambda表达式就是匿名函数,有的地方也称之为闭包。字面意思就是没有名字的函数。它可以很方便地让我们随手定义函数,并把函数当作参数给别的函数调用。好处就是,这样写起来的代码很简洁,读起来也很直观。

例子如下:
在这里插入图片描述

2. Lambda的基本语法形式

在这里插入图片描述

写Lambda表达式,首先要写一个[ ],里面写着捕获变量或者为空,然后是括号包起来的参数列表,还要有箭头跟着返回类型,再一个大括号里写着函数主体。

例子如下:
在这里插入图片描述
因为Lambda表达式箭头后的返回类型可以忽略,所以它等同于下面这段代码:
在这里插入图片描述

3. 变量的捕获(capture clause)

在这里插入图片描述
这个功能的作用是让我们的匿名函数可以访问甚至修改函数外部的变量(如这个例子的N和M),在方括号中可以指定一些外围的变量,这样在匿名函数内部就可以访问这些变量。如果是空的方括号表示不捕获任何变量;如果变量名前有引用符号,则是按引用捕获,可以修改外围变量的值(如这里的M);如果不加引用符号,就是按值捕获(如这里的N)。
在这里插入图片描述

全部按引用捕获

在这里插入图片描述

如果在引用语句中,只写引用符号,那么就会按照引用捕获所有的封闭范围中的变量。

全部按值捕获

在这里插入图片描述
如果在引用语句中,方括号里只写了等号,则表示所有的变量按值捕获。

可以指定一些变量按照值捕获,其他变量按照引用捕获

在这里插入图片描述
比如这里,就是按值捕获N,其他变量按引用捕获。

所以这几个的捕获效果是等价的。
在这里插入图片描述

可捕获当前实例的指针this

如果在某个class中使用匿名函数,还可以使用this捕获当前实例的指针。
在这里插入图片描述

在C++17之后,还可以用*this,表示按值捕获该实例。
在这里插入图片描述

可以定义新的变量,并初始化

在这里插入图片描述
在C++14之后,可以在捕获语句中定义新的变量并初始化。

3. 参数列表

在这里插入图片描述

在C++14新增的特性,参数列表支持auto类型,这使得匿名函数变得更通用更加泛型。上面的匿名函数,可以支持只要是加号的运算都可以用这个匿名函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值