【C++11】lambda表达式

什么是lambda表达式

lambda表达式其实就是一个匿名函数对象。

  1. 对象:即可以作为一个变量使用,进行复制和作为其他函数参数调用
  2. 函数:即带有代码块,里面封装了一些操作语句
  3. 匿名:可以不用专门定义一个函数名称,然后再使用。

lambda如何使用

变量捕获

lambda中变量捕获的开头是可选的默认捕获符=或&,表示会自动按照值活按照引用捕获用到的本地变量

  1. [],默认都是按值捕获使用的变量
  2. [&],默认都是按引用捕获使用的变量
  3. [本地变量名],表明对其按值捕获(不能在默认捕获符=后出现,因为其已自动按值捕获所有本地变量)
  4. [&本地变量名],表明对其按引用捕获(不能再默认捕获符&后出现,因为其已自动按引用捕获所有本地变量)
  5. [变量名=表达式],表明按值捕获表达式的结果(可理解为auto 变量名=表达式)
  6. [&变量名=表达式],表明按引用捕获表达式的结果(可理解为auto& 变量名=表达式)
  7. [=, &变量名],表明按引用捕获对应变量名,其他变量都按值捕获

lambda使用注意事项

  1. 推荐不适用默认捕获符,而是使用哪些用哪些,这样显示捕获,会更好的维护
  2. 一般来说按值捕获是比较安全的做法。但是有特殊情况,需要修改lambda捕获变量值并让外界知晓,或者变量复制代价比较高,可以使用引用。
  3. 当使用引用捕获的时候,需要确保被捕获的变量和lambda表达式的生命周期至少一样长

lambda的优缺点

优点:
  1. 处理逻辑可以直接放在调用函数的后面,看代码时不用调用,比较方便
  2. 不用为函数应该起什么名字而烦恼
缺点:
  1. c++11中新引入的概念,使用起来需要改变下编程思路,和以前不太一样,需要稍微花点时间适应下
posted @   声音~  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示