语法结构
- [ 捕获列表 ](参数列表)->返回值{ 函数体 }
- [ capture list ] (parameters) -> return-type { method definition}
组成元素说明
捕获列表
[ ]是lambda的引出符,捕捉列表能够捕捉父作用域的变量,来给lambda函数使用,可以取以下几种形式:
- [var] 表示以值传递方式捕捉变量var
- [=] 表示值传递捕捉所有父作用域变量
- [&var] 表示以引用传递方式捕捉变量var
- [&] 表示引用传递捕捉所有父作用域变量
- [this] 表示值传递方式捕捉当前的this指针
也可以组合使用,例如[=,&a] 表示以引用传递方式捕捉a,值传递方式捕捉其他变量。
注意:捕捉列表不允许变量重复传递,如:[=,a]、[&,&this],编译时就会报错。
参数列表
使用方式和普通函数的方法相同,如果不需要参数可以连同“()”一起省略。
返回值
“->返回类型”如果没有返回值,可以连同“->”一起省略,如果返回类型很明确,也可以省略,让编译器自动推倒类型。
函数体
“{函数体}”和普通函数相同,除了可以使用参数之外,还可以使用捕获的变量。
mutable
“mutable”放在参数列表之后,Lambda表达式默认是const属性,使用怒mutable可以取消Lambda的常量属性, 不过multable仅仅是让Lamdba函数体修改值传递的变量,但是修改后并不会影响外部的变量。