Skip to content

C++11 features #17

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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