less than 1 minute read

  • 记录一些遇到的 c++ 语法

lambda 函数

Lambda表达式完整的声明格式如下:

[capture list] (params list) mutable exception-> return type { function body }
//即[捕获外部变量列表] (形参列表) 指示符 异常设定-> 返回类型 { 函数体 }

捕获列表的作用,就是使lambda表达式内部能够重用所有的外部变量。捕获列表可以有如下的形式:

  • [] 不捕获任何变量
  • [&] 以引用方式捕获外部作用域的所有变量
  • [=] 以赋值方式捕获外部作用域的所有变量
  • [=, &foo] 以赋值方式捕获外部作用域所有变量,以引用方式捕获foo变量
  • [bar] 以赋值方式捕获bar变量,不捕获其它变量
  • [this] 捕获当前类的this指针,让lambda表达式拥有和当前类成员同样的访问权限,可以修改类的成员变量,使用类的成员函数。如果已经使用了&或者=,就默认添加此选项。
  • [x, &y] x 按值捕获,y 按引用捕获。

参数列表就像普通函数的参数列表。如果不需要参数,可以省略 ()。

  • mutable —— 允许修改按值捕获的变量副本,默认情况下,按值捕获的变量在 lambda 内是 const 的。加上 mutable 后可以改这个副本(不会改外部原变量)。
  • 异常说明(C++11 起较少用)表示函数抛出异常的情况
  • 返回类型后置语法,有些情况下编译器无法自动推导返回类型(比如 return 有不同类型时),需要显式写出。
  • 函数体与普通函数体类似,除了能访问参数和全局变量等,还可访问捕获的变量。

Tags:

Categories:

Updated: