lambda表达式
前言
lambda表达式也叫匿名函数.没有函数名的函数.
是C++11新增的特性.
可以更简洁的创建和调用,
个人理解像是把代码块当作了函数,让代码复用性更强
语法:
[capture list] (parameter list) specifiers exception -> type { function body }//标准语法
[捕获变量] (参数列表) ->返回类型 {函数主体}
[](int x, int y){ return x + y; }//简易用法
1.捕获变量
[capture list]是捕获列表, 为空表示不捕获外围的变量 .
捕获变量加& 有引用的特性.可以在主体内修改该变量
不加& 就是按值捕获,等价于 = .也可以省略等号
多个外围变量用 逗号 间隔 ,=和&不光影响捕获列表,还影响参数列表的实参
在class中使用匿名函数还可以捕获this .在c++17后可以使用 [*this]按值捕获该实例
c++14之后,可以在捕获语句中添加新的变量.类似于for循环的int i=0;
c++14的另一个新增 参数列表支持auto类型
2.其他
(parameter list)是参数列表,没有参数的话可以为空.
specifiers 可选限定符,例: mutable可以在函数体内修改按值捕获的变量.
exception 可选异常说明符,指定lambda是否可以抛出异常
-> type是返回值类型,如果没有返回值可以忽略包括箭头在内的整个部分
{ function body }是表达式的函数体,在应用中必填。