lambda

作者: 混世太保 | 来源:发表于2018-07-19 13:57 被阅读0次

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,引用传递方式捕捉其他所有变量。
    注意的点,捕捉列表不允许变量重复传递。

相关文章

网友评论

      本文标题:lambda

      本文链接:https://www.haomeiwen.com/subject/ajhtmftx.html