传智播客:学习视频传送门
C++11中的Lambda表达式用于定义并创建匿名的函数对象。
基本构成
[capture][parameters]mutable->return->type
{
statement
}
[函数对象参数](操作符重载函数参数)mutable->返回值(函数体)
函数对象参数
[],标识一个Lamda的开始,这部分必须存在。
函数对象参数是用来传递给编译器自动生成的函数对象类的构造函数的。
函数对象参数只能使用那些到定义Lambd为止时Lambda所在作用范围内可见的局部变量。
可用形式:
- 空。没有使用任何函数对象参数
- =。函数体内可以使用Lambda所在作用范围内所有可见的局部变量,并且是值传递方式。
- &。函数体内可以使用Lambda所在作用范围内所有可见的局部变量,并且是引用传递方式。
- this。函数体内可以使用Lambda所在类中的成员变量
- a。将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的,要修改传递进来的a的拷贝,可以添加mutable修饰符。
操作符重载函数参数
标识重载的()操作符的参数,可以省略。参数可以通过按值和按引用两种方式进行传递。
可修改标示符
mutable声明,这部分可以省略。按值传递函数对象参数时,加上mutable修饰符后,可以修改按值传递进来的拷贝(不改变本体)。
函数返回值
当返回值为void,或函数体中只有一处return的地方时,可以省略
作业
点击一个按钮生成一个新的窗口,并同时生成另外一个按钮实现点击关闭新窗口的功能。
-
在widget.h下声明私有变量
QPushButton* closeBtn;
声明函数
void newButton();
-
在widget.cpp下定义函数
void Widget::newButton() { closeBtn->setVisible(true); }
-
在构造函数中:
QWidget* new_Widget = new QWidget; QPushButton* open = new QPushButton("open",this); this->closeBtn = new QPushButton("close",this); closeBtn->move(0,300); closeBtn->setVisible(false); connect(open,&QPushButton::clicked,new_Widget,&Widget::show); connect(open,&QPushButton::clicked,this,&Widget::newButton); connect(closeBtn,&QPushButton::clicked,new_Widget,&Widget::close);