c++中的lambda表达式

  //[capture list](params list)mutable exception->return type{function body}
    //[capture list] :捕获外部变量列表
    //()  :参数列表
    //nutable: 说明是否可以修改捕获的变量,
    //exception :异常设定
    //->  :返回值
    //{}  :函数体
    
    vector<int> a = {2,4,6,1,4};
    sort(a.begin(), a.end(), cmp);
    for_each(a.begin(), a.end(), [&](int a){cout << a << " ";});
    cout<<endl;
    sort(a.begin(), a.end(), [](int a, int b)->bool{return a>b;});
    
    for_each(a.begin(), a.end(), [](int a){cout << a << " ";});
    
    cout << "--------------"<<endl;
    //[capture list] :捕获外部变量列表,有值捕获,引用捕获, 隐式捕获
    int c = 100;
    auto f = [c](int a){cout << c+a<<endl;};
    c = 200;
    f(2);  //运行结果为102, 即更改了c之后, f中的c依然是100,这是一种值传递,拷贝值传递
    
    int& rc = c;
    rc = 100;
    auto f2 = [&c](int a)mutable throw (){c++;cout << c + a<<endl;};
    //mutable 表示捕获的值是可修改的
    //throw ()  表示不抛出任何异常
    c = 200;
    f2(2);   //传递饮用,c的改变导致了函数f2输出的变化
    
    //隐式捕获,编译器可以通过函数体内部的代码确定需要捕获哪些变量。有两种形式[=]和[&], [=]表示隐式值捕获,[&]表示隐式引用捕获
    //混合捕获方式,[=,&x], 表示x以引用捕获的方式捕获,其他变量隐式值捕获
    //      [&,x], 表示x以值捕获方式捕获,其他变量以引用方式捕获
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值