lambda表达式的优点:
* 声明式编程风格:就地匿名定义目标函数或函数对象,不需要额外填写一个命名函数或函数对象
* 简洁
* 在需要的时间和地点实现功能闭包,程序更加灵活
表达式的基本概念以及基本用法
定义一个匿名函数,可以捕获一定范围内的变量,其语法可以表达如下:
[capture] [params] opt->ret {body;};
其中:capture是捕获列表;params是参数列表;opt是函数选项;ret是返回值类型;body是函数体
注意点:
1、返回值类型可以省略,编译器会根据return语句自动推导出返回值类型,但是初始化列表不能用于返回值的自动推导出返回值内容;
eg:auto f2=[=] ()mutable{return a++};
lamba表达式可以通过捕获列表捕获一定范围内的变量:
[]:不捕获任何变量
[&]:捕获外部作用域中的所有变量,并作为引用在函数体中使用
[=]:捕获外部作用域中所有变量,并作为副本在函数体中使用
[=,&foo]:按值捕获外部作用域中所有变量,并按引用捕获foo变量
[bar]:按值捕获bar变量,同时不捕获其他变量
[this]:捕获当前类中的this指针,让lanbda表达式拥有和当前类成员函数同样的访问权限,如已使用&或者=,就默认添加此选项,捕获this的目的是可以在lambda中使用当前类的成员函数和成员变量。
lambda表达式
最新推荐文章于 2024-05-23 20:20:57 发布