Skip to content

C++11 features #17

@CodingMie

Description

@CodingMie

Lambda Function(匿名函数):

语法

[capture](parameters) -> return_type { function_body }
例:[](int x, int y) -> int { return x + y; }

如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。如果没有 return 语句,则类似 void f(...) 函数。

Lambda表达式可以访问在它被调用的作用域内的局部变量。
capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:

  • [a,&b] a变量以值的方式被捕获,b以引用的方式被捕获。
  • [this] 以值的方式捕获 this 指针。
  • [&] 以引用的方式捕获所有的外部自动变量。即可修改外部自动变量。
  • [=] 以值的方式捕获所有的外部自动变量。即不可修改外部自动变量。
  • [] 不捕获外部的任何变量。
    例:
    image
    params 指定 lambda 表达式的参数。

优点:

函数对象能维护状态,但语法开销大,而函数指针语法开销小,却没法保存范围内的状态。
lambda函数结合了两者的优点,让你写出优雅简洁的代码。

何时使用lambda:

你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。
Lambda 表达式就可以用来做这件事。
例:
image
输出:
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions