C++小知识点
- 记录一些遇到的 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 有不同类型时),需要显式写出。
- 函数体与普通函数体类似,除了能访问参数和全局变量等,还可访问捕获的变量。