匿名函数
-
声明格式
[capture list] (params list) mutable exception-> return type {function body }
capture list
捕获外部变量列表,在Lambda表达式的可见范围内的可见外部变量,如果Lambda函数想要访问他,就必须在capture list里声明,多个外部变量用,
分割
int a = 10, b=20;
cout << [a] () {return a;}() ; //输出10
//如果想返回a+b的值
//第一种方法
cout << [a,b] {return a+b;}(); //没有参数、mutable、exception、-> 、return type的时候,形参的括号可以省略
//第二种方法
cout << [=] {return a+b;}();
//懒得写捕获参数列表时或者需要捕获的太多,就用[=]来声明所有外部可见变量
//这两种方法是值传递
//如果想修改 外部变量 a和b 的值呢?
//第一种方法
[&a, &b]{a=0, b=0;}();
//第二种方法
[&] {a=0,b=0;}();
//以上两种方法都是引用传递
params list
参数列表
- 不能有默认参数
- 不支持可变参数
- 所有参数必须有参数名
mutable
当捕获列表是值传递的时候,这个值是const
,若想在函数体内修改,必须加mutable修饰符
int a=10;
[=]() mutable {a=20; cout << a;}();
//由于是值传递,所以外部的a值不变
异常说明
没学异常,日后再补
返回类型
可省略, 由return
语句决定;