C++-lambda表达式

lambda表达式

[]标识符 表示一个Lambda的开始 必须存在 不能省略
()参数
{}实现体

lambda表达式作用是什么

用于定义并创建匿名的函数对象

例子

最简单的使用 lambda表达式会自动判断返回值
末尾的(9)会被赋值在(int x)的x上 所以输出9

[](int x) {cout << x << endl;return 0 } (9);//9

用自动类型 也就是函数指针接收这个lambda表达式

这样就可以简单实现函数 不需要再顶部重新定义一个

    auto b = [](int x) {cout << x << endl; };
    b(5);//5

用function接受lambda表达式

int a = 1;
int b = 2;
function<void(int, int)> dfs = [&](int index, int steps) 
dfs(a,b);

值传递

    int a = 0;
    auto b = [a]() {cout << a << endl; };//只能传入a变量
    auto c = [=]() {cout << a << endl; };//所有值都是以值传递的方式传入
    //auto b = [a]() {a = 2;cout << a << endl; };//会直接报错
    a = 1;
    b();//0

会发现输出的是0 也就意味着值是在lambda表达式之后就不会再被传入了 同样在lambda表达式中也不能对a值进行更改

引用传递

指定名字叫a的变量会被引用传入

    int a = 0;
    auto b = [&a]() {cout << a << endl; };//只有a变量通过引用方式传入
    auto c = [&]() {a = 2;cout << a << endl; };//同上所有值都引用方式传入
    a = 1;
    b();//1
    c();//2

混合传递

int a = 0;
int b = 1;
    auto c = [&a,b]() {cout << a << endl; cout<<b<<endl;};//a是引用传递 b是值传递 也可以写成[&,b]就是其他都是引用传递 而b是值传递
    b = 3;
    a = 4;
    c();//4,1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值