- 为什么要使用lambda
- 就地匿名的定义一个目标函数或者函数对象,不需要额外的再写一个命名函数或者函数对象,以更直接的方式去写函数,可以调高程序的可读性和可维护性。
- 简洁:不要额外的的再写一个函数或者函数对象,避免了代码膨胀或者功能分散。
-
在需要的时间或者地点实现功能闭包,是程序更加灵活。
-
lambda 的语法
- [capture] (parameters) mutable->return-type{statement};
- lambda 的内部实现
-
编译器会自动生成一个匿名类,该类重载了 () 运算符。
-
当写出上面一块代码时,那么编译器就会将他们转换成以下的代码
-
其中,函数名具体是取决于编译器自己编译,私有成员变量是捕获列表所来,重载的 () 操作符函数具体是由 lambda 表达式 body 所来
-
lambda 的使用
- 捕获列表:
- [boo]:值捕获 boo 的值
- [&, a]:按引用捕获所有局部变量,按值捕获方式捕获 a
- [&, a, b, c]:同上
- [this]:在成员函数中,直接捕获 this 指针
- mutable:
- 值捕获后,在匿名函数中对该值是不能做修改的,如果想要做修改,必须加上 mutable 关键字,并且在匿名函数中做的修改结果在函数外是不会生效的;
- parameters:
- 参数列表也是可以将外部的值传递给匿名函数内部的,和捕获列表的在于,parameter 对应的 operator函数的形参列表。
- return-tyep:
- 对于编译器能自动推导的返回类型,可以省略 return-type,但是如果无法推导的类型,就必须添加上返回类型
- 当函数不止一个return语句时,就需要加上返回类型了。
Example:
Original: https://www.cnblogs.com/wanghao-boke/p/15836627.html
Author: 王清河
Title: C++ lambda 用法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535270/
转载文章受原作者版权保护。转载请注明原作者出处!