首页 > 编程语言 >【C++11】lambda表达式

【C++11】lambda表达式

时间:2022-12-30 00:44:31浏览次数:40  
标签:11 变量 捕获 按值 C++ 变量名 表达式 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中新引入的概念,使用起来需要改变下编程思路,和以前不太一样,需要稍微花点时间适应下

标签:11,变量,捕获,按值,C++,变量名,表达式,lambda
From: https://www.cnblogs.com/ganshang/p/17013913.html

相关文章