lambda 表达式的样子。
int main() {
int girls = 3, boys = 4;
auto totalChild = [](int x, int y) -> int { return x+y;};
return totalChild(girls, boys);
}
其函数语法定义如下
[capture](parameters) mutable -> return-type {statement }
[capture] : 捕捉列表。捕捉列表能够捕捉上下文中的变量以供lambda函数使用。
(parameters): 参数列表。与普通函数的参数列表一致。如果不需要传入参数,则可以省略括号。
mutable: mutable修饰符、默认情况下,lambda函数总是一个const函数,在使用该修饰符时,参数列表不可省略(即使参数为空)
->return-type: 返回类型。用追踪返回类型形式声明函数的返回类型。在不需要返回值时也可以省略。或者在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。
{statement}:函数体。还可以使用捕获到的所有变量。
捕捉列表有如下几种形式:
- [var] 表示值传递方式捕捉变量var.
- [=]表示值传递方式捕捉所有父作用域的变量(包括this)。
- [&var]表示引用传递捕捉变量var。
- [&]表示引用传递捕捉所有父作用域的变量(包括this)。
- [this]表示值传递方式捕捉当前的this指针。
举例:
- [=, &a, &b]表示以引用传递的方式捕捉变量a和b,值传递方式捕捉其他所有变量。
- [&, a, this]表示以值传递的方式捕捉变量a和this,引用传递方式捕捉其他所有变量。
注意的点,捕捉列表不允许变量重复传递。
网友评论