Lambda 表达式(lambda expression)是一个匿名函数,从软件开发角度看,也是一种编程范型。C++11 开始支持函数式编程范型lambda。
lambda函数的语法定义如下:
[capture] (parameters) mutable ->return-type {statement}
其中,
[capture]: 捕捉列表。
捕捉列表总是出现在lambda函数的开始处。事实上,[]是lambda引出符。编译器根据该引出符判断接下来的代码是否是lambda函数。允许访问当前作用域下的某一个(些)变量
语法上,捕捉列表由多个捕捉项组成,并以逗号分割。捕捉列表有如下几种形式:
[var] 表示值传递方式捕捉变量var。
[=] 表示值传递方式捕捉所有父作用域的变量(包括this)。
[&var] 表示引用传递捕捉变量 var。
[&] 表示引用传递捕捉所有父作用域的变量(包括this)。
[this] 表示值传递方式捕捉当前的 this 指针。
[=,&var] 捕获当前作用域所有变量,以值传递,但以引用传递var(也可以使用[&,var]来进行值传递)
(parameters): 参数列表。
与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号0一起省略。
mutable: mutable修饰符。
默认情况下,lambda丽数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。
->return-type:返回类型。
用追踪返回类型形式声明函数的返回类型。出于方便,不需要返回值的时候也可以连同符号->一起省略。此外,在返回类型明确情况下,也可以省略,让编译器对返回类型进行推导。
{statement}: 函数体。
内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。
简单用例:
int main()
{