c++泛型编程之定制操作lambda函数

本文深入探讨了C++11引入的Lambda表达式,一种类似匿名函数的特性,解决了谓词传递参数数量限制的问题。详细解析了Lambda表达式的语法结构,包括捕获列表、参数列表、修饰符、异常处理、返回类型及函数体,同时介绍了如何通过省略部分语法元素简化表达式。此外,还讲解了不同类型的捕获方式及其对变量的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lambda表达式

  1. 介绍:由c++11引入,类似匿名函数,解决谓词只能传入一个或两个的问题。
  2. 声明lambda表达式:
[capture list] (params list) mutable exception-> return type { function body }

参数解释

  1. capture list:lambda表达式捕捉的外部变量列表
  2. params list:函数的参数列表
  3. mutable:用来说用是否可以修改捕获的变量
  4. exception:异常设定
  5. return type:返回值类型,为尾置声明
  6. body:函数主体

我们可以省略其中的某些参数来简化lambda表达式:

编号省略表达式
1参数列表、mutable、exception、return type[capture list]{function body}
2return type、mutable、exception[capture list](params list){function body}
3mutable、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值