lambda表达式的标准格式
参考 https://www.cnblogs.com/DswCnblog/p/5629165.html
[捕获外部变量列表] (函数参数列表) mutable 或 exception 声明 -> 返回值类型 {函数体}
各项含义:
capture list:捕获外部变量列表 ---
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
1. 捕获外部变量
Lambda表达式可以使用其可见范围内的外部变量,但必须明确声明(明确声明哪些外部变量可以被该Lambda表达式使用)。那么,在哪里指定这些外部变量呢?Lambda表达式通过在最前面的方括号[]来明确指明其内部可以访问的外部变量,这一过程也称过Lambda表达式“捕获”了外部变量。
一言以蔽之——设定了lambda表达式的视力范围。
具体捕获方式参考:https://www.cnblogs.com/DswCnblog/p/5629165.html
一般是引用方式捕获:
int a = 123;
auto f = [&a] { cout << a << endl; };
在Lambda表达式中,如果以传值方式捕获外部变量,则函数体中不能修改该外部变量,否则会引发编译错误。那么有没有办法可以修改值捕获的外部变量呢?这是就需要使用mutable关键字,该关键字用以说明表达式体内的代码可以修改值捕获的变量,示例:
int a = 123;
auto f = [a]()mutable { cout << ++a; }; // 不会报错
2. 函数参数列表
这里有几点要求:
1)参数列表中不能有默认参数
2)不支持可变参数
3)所有参数必须有参数名
对可变参数感兴趣可参考:https://blog.csdn.net/iteye_11306/article/details/82004551
常用lambda格式:
别忘了,lambda表达式要使用,用括号(参数)调用。注意参数要对应2.函数参数列表