【C++11】lambda表达式
什么是lambda表达式
lambda表达式其实就是一个匿名函数对象。
- 对象:即可以作为一个变量使用,进行复制和作为其他函数参数调用
- 函数:即带有代码块,里面封装了一些操作语句
- 匿名:可以不用专门定义一个函数名称,然后再使用。
lambda如何使用
变量捕获
lambda中变量捕获的开头是可选的默认捕获符=或&,表示会自动按照值活按照引用捕获用到的本地变量
- [],默认都是按值捕获使用的变量
- [&],默认都是按引用捕获使用的变量
- [本地变量名],表明对其按值捕获(不能在默认捕获符=后出现,因为其已自动按值捕获所有本地变量)
- [&本地变量名],表明对其按引用捕获(不能再默认捕获符&后出现,因为其已自动按引用捕获所有本地变量)
- [变量名=表达式],表明按值捕获表达式的结果(可理解为auto 变量名=表达式)
- [&变量名=表达式],表明按引用捕获表达式的结果(可理解为auto& 变量名=表达式)
- [=, &变量名],表明按引用捕获对应变量名,其他变量都按值捕获
lambda使用注意事项
- 推荐不适用默认捕获符,而是使用哪些用哪些,这样显示捕获,会更好的维护
- 一般来说按值捕获是比较安全的做法。但是有特殊情况,需要修改lambda捕获变量值并让外界知晓,或者变量复制代价比较高,可以使用引用。
- 当使用引用捕获的时候,需要确保被捕获的变量和lambda表达式的生命周期至少一样长
lambda的优缺点
优点:
- 处理逻辑可以直接放在调用函数的后面,看代码时不用调用,比较方便
- 不用为函数应该起什么名字而烦恼
缺点:
- c++11中新引入的概念,使用起来需要改变下编程思路,和以前不太一样,需要稍微花点时间适应下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现