lambda表达式
- 介绍:由c++11引入,类似匿名函数,解决谓词只能传入一个或两个的问题。
- 声明lambda表达式:
[capture list] (params list) mutable exception-> return type { function body }
参数解释:
- capture list:lambda表达式捕捉的外部变量列表
- params list:函数的参数列表
- mutable:用来说用是否可以修改捕获的变量
- exception:异常设定
- return type:返回值类型,为尾置声明
- body:函数主体
我们可以省略其中的某些参数来简化lambda表达式:
编号 | 省略 | 表达式 |
---|---|---|
1 | 参数列表、mutable、exception、return type | [capture list]{function body} |
2 | return type、mutable、exception | [capture list](params list){function body} |
3 | mutable、exception | [capture list](params list) -> return type {function body} |
根据后来学习的深入会有更多形式的lambda表达式,所以平时注重总结。
如果lambda表达式中没有任何一条return语句并且没有尾置指定返回类型,那么默认返回类型为void
lambda表达式的捕获和返回值
捕获类型
capture list | 解释 |
---|---|
[] | lambda表达式不能使用任何函数中的变量,捕获列表为空 |
[names] | names为一个用逗号隔开的名字,为捕获的函数中的变量,默认为值捕获,如果名字前面用&,那么为引用捕获 |
[&] | 隐式捕获列表,引用捕获函数体中的变量,lambda表达式中用到的所有函数实体都是以引用的方式使用 |
[=] | 隐式捕获列表,值捕获函数体中的变量,lambda表达式中的所有函数实体都是以值捕获的方式使用 |
[&, identifier_list] | identifier_list为使用逗号隔开的名字列表,采用值捕获的方式获得,并且identifier_list中的变量前面不能使用& |
[=, identifier_list] | identifier_list为使用逗号隔开的名字列表,采用引用捕获的方式获得,并且identifier_list中的变量前面必须使用& |
返回值指定:
如果lambda表达式中的函数体内没有任何return语句的话,那么返回值为void类型,否则lambda表达式自己推断返回值。同样lambda表达式支持指定返回值,但是为尾置声明,所以回出现[capture list]() -> return type{function body}
这种的lambda表达式,函数的返回值在尾部指出(-> return type
)