1.lambda表达式
一个lambda表达是定义了一个匿名函数。不同于一般函数的地方时,lambda可以捕获它们作用域内的变量然后使用它们。
实现:
[] (double value){return valuevaluevalue;}
[] lambda引入符,[]内可以空或非空,()内是lambda参数列表
{}内是lambda主体内可以有若干条语句,默认返回类型为返回值的类型,没有返回值的时候返回类型为void
也可以使用 尾返回类型语法来指定返回类型
也可以写作
[] (double value)->double{return valuevaluevalue}
2.对lambda表达式命名
尽管lambda表达式是一个匿名对象,仍然可以用一个变量来保存它的地址。不需要知道类型,编译器需要知道:
auto cube = [] (double value){return valuevaluevalue}//当[]中没有内容时可以这样做
可以把cube当所函数指针来使用,如 double x{2,5};
3.将lambda表达式传给函数
编译器纵使知道lambda表达式的类型,所以他们能实例化一个接受lambda表达式作为参数的函数模板
可以定义一个模板来转换一些由lambda表达式指定的元素
template <typename ForwardIter,typename F>
void change(ForwardIter first,Forward last,F fun)
{
for(suto iter=first;iter!=last;++iter){
*iter=fun(*iter);
}
}
形参fun解说人和的lambda表达式,也接受函数对象或普通的函数指针
4.捕获子句
lambda引入符[]并不一定为空,可以包含捕获子句,制定一些封闭范围内的变量,可以在lambda主题内使用。
lambda语法结构
[捕获类表](参数列表)mutable(可选) ->返回类型 {主体}
[]默认的捕获子句捕获和lkambda表达式定义同样范围内的所有变量
[=]lambda表示是的主体可以以值的形式访问所有封闭范围内的自动变量,即可以在表达式里适用所有变量但不能改变它们的值
如果添加了mutable关键字就可以在lambda中改变变量副本的值
[&]所有封闭范围内的变量都要以引用的方式是用,所以他们的值能在lambda中改变,此时就不需要mutable关键字了
不能用auto制定一个变量的类型然后保存一个访问这个变量本身的lambdadizhi ——auto不能用于自引用
可以捕获闭合范围内指定的变量,只需在捕获子句中列出他们的名称。如果想以引用的方式捕获,在每个名字前加&前缀。可以在一个通过引用来捕获特定变量的捕获子句中同时使用=,捕获子句[=,&factor]允许我们以引用的方式使用factor,以值引用的方式捕获闭合范围内的其他变量。
本文详细介绍了C++中的Lambda表达式,包括其基本语法、如何命名、传递给函数以及捕获子句的使用。Lambda表达式允许在C++中创建匿名函数,能够捕获上下文中的变量并在表达式主体中使用。
566

被折叠的 条评论
为什么被折叠?



