c++11 lambda表达式

  • 调用和传入参数
    //lambda
    []{
        qDebug()<<"直接调用 lambda";
    }();//直接调用
    auto func3 = []{
        qDebug()<<"lambda";
    };
    func3();//调用
    auto func4 = [](const QString & str){
        qDebug()<<"传入参数"<<str;
    };
    func4("hello");//传入参数
    std::function<void(const QString &)>func5 = func4;//lambda的类型
    func5("std::function");
  • 返回值类型推导和指定
    //返回值默认推导
    auto value10 = []{
        return 5.55;
    }();
    //指定返回值类型,5.55转换为int类型5返回
    auto value11 = []() ->int {
        return 5.55;
    }();
    qDebug()<<value10<<value11;//5.55 5
  • []参数捕获
    1.[=]以值方式捕获,by value,此时变量是read only的,const
    2.[&]引用方式捕获,by reference
    3.也可以单独对指定变量捕获
    //[]参数捕获
    //[=]以值方式捕获,by value,此时变量是read only的,const
    //[&]引用方式捕获,by reference
    //也可以单独对指定变量捕获
    int w = 0;
    int x = 1;
    int y = 2;
    int z = 3;
    //默认以值方式捕获所有变量,y、z以引用方式捕获
    [=,&y,&z] /*() mutable 此时可在lambda函数内改变值方式捕获变量的值,但是不会影响外部变量的值,copy*/ {
        qDebug()<<"in lambda before add:"<<w<<x<<y<<z;
        //w += 5;//error
        //x += 5;//error
        y += 5;
        z += 5;
    }();
    qDebug()<<"in main:"<<w<<x<<y<<z;
  • std::find_if中使用lambda
    //std::find_if中使用lambda
    std::vector<QString> vec4{"aAa","cCc","dDd","bBb","fFf","eEe"};
    auto value12 = std::find_if(vec4.begin(),vec4.end(),[](const QString & str){
        return str.compare("ddd",Qt::CaseInsensitive) == 0;
    });
    if(value12 != vec4.end()){
        qDebug()<<"find it:"<<*value12;
    }

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值