一个lambda表达式表示一个可调用的代码单元,我们可以将其理解为一个未命名的内联函数。与任何函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。但与函数不同,lambda可能定义在函数内部。
lambda形式
[capture list](paramter list) mutable exception-> return type{function body}
其中:
capture list:捕获外部变量列表
params list:形参列表(lambda没有默认参数)
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
eturn type:返回类型
function body:函数体
捕获形式
一个lambda只有在其捕获列表总捕获一个它所在函数中的局部变量,才能在函数体重使用该变量。
捕获列不爱中用于局部非static变量,lambda可以直接使用局部static变量和在他所在函数之外声明名字。
捕获形式 | 说明 |
---|---|
[] | 不捕获任何外部变量 |
[变量名, …] | 默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符) |
[this] | 以值的形式捕获this指针 |
[=] | 以值的形式捕获所有外部变量 |
[&] | 以引用形式捕获所有外部变量 |
[=, &x] | 变量x以引用形式捕获,其余变量以传值形式捕获 |
[&, x] | 变量x以值的形式捕获,其余变量以引用形式捕获 |