美文网首页
QT 练习3:C++ lambda 表达式

QT 练习3:C++ lambda 表达式

作者: 孙掌门 | 来源:发表于2019-10-09 19:53 被阅读0次
    ### C++ lambda 表达式
    
    ```
    如果不支持 lambda , 需要在 .pro 文件中增加,CONFIG += C++11
    
        /* [](){},如果调用,后面增加(),[](){}()
         *[],代表开始,
         * 如果[]中传空,代表没有使用任何函数对象参数
         * =。函数体内可以使用 lambda所在范围内可见的局部变量(包括 lambda 所在类的 this),并且是值传递方式,相当于编译器为我们自动的按值传递了所有局部变量
         * &。函数体内可以使用 lambda 所在范围内的所有可见的局部变量(包括 lambda 所在类的 this),并且是引用传递方式,相当于编译器为我们自动的按照引用传递了所有的局部变量。
         * this。函数体内可以使用 lambda 所在类的成员变量
         * a。将 a 按值进行传递,内部只能使用a,不能使用别的,按值进行传递的时候,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的,要修改传递进来的a的拷贝可以加 mutable 修饰符
         * &a,将a按引用传递
         * a,&b。将a按值传递,b按引用传递
         * =,&a,&b。除了a,b按照引用传递,其余按照值传递
         *
         * */
    ```
    
    ### 例子
    
    ```
     //  例子
    //    QPushButton *testBtn = new QPushButton("lambda",this);
    //    // 值传递
    //    [=](){
    //       testBtn->setText("lambda test");
    //       testBtn->move(200,200);
    //    }();
    
        // 引用传递
    //    QPushButton *testBtn = new QPushButton("lambda",this);
        // 值传递
    //    [&](){
    //       testBtn->setText("lambda test");
    //       testBtn->move(200,200);
    //    }();
        // a 传递
    //    [testBtn](){
    //       testBtn->setText("lambda test");
    //       testBtn->move(200,200);
    //       btn->setText("aaa");// 此行会报错
    //    }();
        //mutable 关键字,用于修改当时的值,不影响整体
        QPushButton *testBtn1 = new QPushButton("mutable",this);
        QPushButton *testBtn2 = new QPushButton("qdebug",this);
        testBtn1->move(50,50);
        testBtn2->move(100,100);
        int m = 10;
        // mutable 关键字修改 m 的值
        connect(testBtn1,&QPushButton::clicked,this,[m]()mutable{
            // 改变 m 的值,
            m += 100;
            qDebug() << m;//110
        });
        connect(testBtn2,&QPushButton::clicked,this,[m](){
            qDebug() << m;//10
        });
    
    
        // 返回值
        int ret = []() ->int {return 1000;}();
        qDebug() << ret;
    ```
    

    DEMO

    相关文章

      网友评论

          本文标题:QT 练习3:C++ lambda 表达式

          本文链接:https://www.haomeiwen.com/subject/loibuctx.html