置百丈玄冰而崩裂,掷须臾池水而漂摇。

[Qt]lambda 表达式

QT 强强

lambda 表达式说明:

含义:lambda表达式是定义匿名函数对象的便捷方法,直接在调用或作为参数传递的函数位置.

表达式示例: [=] ( ) mutable throw( ) -> int { } 

  由6个部分组成

  1.capture子句(C++规范中也称为lambda引入器).

   详细说明:

捕获外部变量列表 = 是以传值的方式引用 & 是以引用的方式引用.

值捕获:[a]{cout << a << endl}

引用捕获:

int a = 123;

[&a]{cout << a << endl};

a = 321;

输出结果a:321

隐式捕获:编译器根据函数体中的代码来推断需要捕获哪些变量.

[=] 表示以值捕获的方式捕获外部变量

[&] 表示以引用捕获的方式捕获外部变量

混合方式:

[]          不捕获任何外部变量

[变量名,...] 默认以值的形式捕获指定的多个外部变量,如果引用捕获需要使用&说明

[this]      以值的形式捕获this指针

[=]         以值的形式捕获所有外部变量

[&]         以引用的形式捕获所有外部变量

[=, &x]     变量x以引用的形式捕获,其余变量以传值的形式捕获

[&, x]      变量x以值的形式捕获,其余变量以引用的形式捕获

  2.参数列表(可选).(也称作为lambda声明符)

  3.可变规范(可选).用来说名是否可以修改捕获的变量,const.

  4.exception-specification(可选). 异常设定

  5.trailing-return-type(可选). 返回类型

  6.lambda正文. 函数体



实例一:定义一个并且调用:

#include "mainwindow.h"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //定义一个lambda表达式
    [](){
        qDebug()<<"表达式";
    }();// 直接()  直接调用
}


MainWindow::~MainWindow()
{

}


实例二:传入一个值入参

#include "mainwindow.h"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    int m=10;
    //定义一个lambda表达式
    [m](){
        qDebug()<<"表达式"<<m;
    }();// 直接()  直接调用
}


MainWindow::~MainWindow()
{

}


实例三:传入值入参,修改(函数内副本修改)

#include "mainwindow.h"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    int m=10;
    //定义一个lambda表达式
    [m]() mutable{
        m = m+1;
        qDebug()<<"表达式"<<m;
    }();// 直接()  直接调用
}


MainWindow::~MainWindow()
{

}


实例四:绑定信号槽

#include "mainwindow.h"
#include "QDebug"
#include "QPushButton"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    QPushButton *btn = new QPushButton();
    btn->setText("按钮");
    btn->setParent(this);
    btn->resize(100,20);
    int m=10;
    //定义一个lambda表达式
    connect(btn,&QPushButton::clicked,this,[m]() mutable{
        m = m+1;
        qDebug()<<"表达式"<<m;
    });

}


MainWindow::~MainWindow()
{

}


发表评论:

验证码