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