c++ lambda的使用和介绍

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) 闭包执行方法,传入的参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值