目录
一、Lambda表达式是什么?有什么用?
C++11中的Lambda表达式用于定义并创建匿名的函数对象的函数表达式,以简化编程工作。
Lambda表达式的基本构成:
[capture](parameters) mutable ->return-type
{
statement
}
[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}
二、函数对象参数的形式
1、Lambda表达式的函数对象参数:
[] 标识符 匿名函数
= 值传递
& 引用传递
() 参数
{} 实现体
mutable 修饰 用于修改值传递的变量 修改的是拷贝 而不是本体
返回值
[]() ->{}
2、mutable关键字:
mutable关键字的具体使用例子:
将m值传递进来,修改的是m的拷贝,本身不变。
int m = 10;
qDebug() << m;//输出m,m=10
点击输出110按钮,输出110
QPushButton * myBtn = new QPushButton ("输出110",this);
int m = 10;
connect(myBtn,&QPushButton::clicked,this,[m] ()mutable { m = 100 + 10; qDebug() << m; });
点击输出m按钮,输出10
QPushButton * myBtn2 = new QPushButton ("输出m",this);
int m = 10;
connect(myBtn2,&QPushButton::clicked,this,[=] () { qDebug() << m; });
全部代码:
//mutable关键字 用于修改值传递的变量 修改的是拷贝 而不是本体
QPushButton * myBtn = new QPushButton ("输出110",this);
QPushButton * myBtn2 = new QPushButton ("输出m",this);
myBtn2->move(100,100);
int m = 10;
connect(myBtn,&QPushButton::clicked,this,[m] ()mutable { m = 100 + 10; qDebug() << m; });
connect(myBtn2,&QPushButton::clicked,this,[=] () { qDebug() << m; });
qDebug() << m;
实现结果:
3、Lambda表达式实现关闭窗口:
使用Lambda表达式实现点击按钮,关闭窗口
//利用Lambda表达式 实现点击按钮 关闭窗口
QPushButton *btn3 = new QPushButton("关闭",this);
btn3 -> move(200,0);
btn3 ->resize(200,200);
// connect(btn3,&QPushButton::clicked,this,&Widget::close);
connect(btn3,&QPushButton::clicked,this,[=](){
this -> close();
//可以调用其他函数
eee();
});
}
void Widget::eee()
{
qDebug() << "饿了";
}
点击关闭按钮,窗口关闭,打印饿了。
三、Lambda表达式适用的Qt版本
Qt5.5以上版本里面已经默认支持Lambda表达式
Qt5.4以下的版本使用Lambda表达式,需要在工程文件(.pro)的结尾加上
CONFIG += c++11