什么是lambda表达式
lambda表达式其实就是一个匿名函数对象。
- 对象:即可以作为一个变量使用,进行复制和作为其他函数参数调用
- 函数:即带有代码块,里面封装了一些操作语句
- 匿名:可以不用专门定义一个函数名称,然后再使用。
lambda如何使用
变量捕获
lambda中变量捕获的开头是可选的默认捕获符=或&,表示会自动按照值活按照引用捕获用到的本地变量
- [],默认都是按值捕获使用的变量
- [&],默认都是按引用捕获使用的变量
- [本地变量名],表明对其按值捕获(不能在默认捕获符=后出现,因为其已自动按值捕获所有本地变量)
- [&本地变量名],表明对其按引用捕获(不能再默认捕获符&后出现,因为其已自动按引用捕获所有本地变量)
- [变量名=表达式],表明按值捕获表达式的结果(可理解为auto 变量名=表达式)
- [&变量名=表达式],表明按引用捕获表达式的结果(可理解为auto& 变量名=表达式)
- [=, &变量名],表明按引用捕获对应变量名,其他变量都按值捕获
lambda使用注意事项
- 推荐不适用默认捕获符,而是使用哪些用哪些,这样显示捕获,会更好的维护
- 一般来说按值捕获是比较安全的做法。但是有特殊情况,需要修改lambda捕获变量值并让外界知晓,或者变量复制代价比较高,可以使用引用。
- 当使用引用捕获的时候,需要确保被捕获的变量和lambda表达式的生命周期至少一样长
lambda的优缺点
优点:
- 处理逻辑可以直接放在调用函数的后面,看代码时不用调用,比较方便
- 不用为函数应该起什么名字而烦恼
缺点:
- c++11中新引入的概念,使用起来需要改变下编程思路,和以前不太一样,需要稍微花点时间适应下