Lambda 表达式具体形式如下:
[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下
capture list:捕获外部变量列表
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
int main()
{
int x, y, z;
x = 10;
y = 20;
z = [&x,y](int &a, int b) -> int {
int demo;
a++;
b--;
demo = a * b;
return demo;
}(x, y);
cout << z << endl;
cout << x << endl;
cout << y << endl;
return 0;
}
打印结果:
209
11
20
代码剖析:
[&x,y] : &x, 表示把x的地址传进去, 在里面修改x值,外面的x的值跟着改变 ,y表示把值传进去, 修改y不改变外部y的值
(int &a,int b) 传地址 需要使用&符号
(x,y) 闭包执行方法,传入的参数