lambda语法格式:
[捕获列表](函数参数) 可变规则 ->返回值类型{返回值类型}
1.捕获列表:
捕获列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用
捕获列表参数有以下形式:
[]表示不捕获任何变量
[var]表示值传递方式捕获变量var
[=]表示值传递方式捕获所有父作用域的变量(包括this)
[&var]表示引用传递捕捉变量var
[&]表示引用传递方式捕捉所有父作用域的变量(包括this)
[this]表示值传递方式捕捉当前的this指针
注意:捕捉列表不允许变量重复传递
2.函数参数
除了捕获列表之外,Lambda还可以接受输入参数。参数列表是可选的,类似于函数的参数列表
3.可变规格mutable
mutable修饰符, 默认情况下Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时。
4.异常说明
你可以使用 throw() 异常规范来指示 Lambda 表达式不会引发任何异常 。
5.返回类型
lambda表达式的返回类型会自动推导。除非你指定了返回类型,否则不必使用关键字。返回型类似于通常的方法或函数的返回型部分。但是,返回类型必须在参数列表之后,并且必须在返回类型到之前包含类型关键字。如果Lambda主体仅包含一个return语句或该表达式未返回值,则可以省略Lambda表达式的return-type部分。如果Lambda主体包含一个return语句,则编译器将从return表达式的类型中推断出return类型。否则,编译器将返回类型推导为void。
6.Lambda函数体
Lambda表达式的Lambda主体可以包含普通方法或函数的主体可以包含的任何内容。普通函数和Lambda表达式的主体都可以访问以下类型的变量:
捕获变量
形参变量
局部声明的变量
类数据成员,当在类内声明this并被捕获时
具有静态存储持续时间的任何变量,例如全局变量