c++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。
qt5以前 要去.pro文件加上 config +=c++11
lambda本质为 class
1.【】.标识一个Lambda的开始,这部分必须存在。
空:没有使用任何函数对象函数
=:函数体内可以使用lambda所在作用范围内所有可见的局部变量(包括lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
&:函数体内可以使用lambda所在作用范围内所有可见的局部变量(包括lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。
this:函数体内可以使用Lambda所在类中的成员变量
a:将a按值进行传递,按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。要修改进来的a的拷贝,可以添加mutable修饰符。
&a:将a按引用进行传递。
a,&b:将按值传递,b按引用传递
=,&a,&b 除了a,b按引用传递,其他的都按值
&,a,b,除了a,b,按值传递,其他的都按引用
一般就=就够用了
在[]中用
//Qt4版本以前的信号和槽连接方式
//利用Qt4信号槽 连接无参版本
connect(zt,SIGNAL(hungry()),hyx,SLOT(treat()));
[=](){
btn->setText("aaaa");
}();//声明完加个括号原地调用
[btn](){
btn->setText("aaaa");
btn2->setText("bbbb");
}();//声明完加个括号原地调用 只有btn在括号里,只能改btn,改不了btn2
操作符重载函数参数:
标识重载的()操作符的参数,没有参数时,这部分可以省略。参数可以通过按值和按引用两种方式进行传递。
可修改标识符:
mutble声明,这部分可以省略。按值传递函数对象参数时,加上mutble修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)
lambda函数作用:一般都是写在一个函数里,简化重复代码,而又不想让外部调用
qDebug()<<m; //打印
函数返回值:
->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。
是函数体
{},标识函数的实现,这部分不能省略,但函数体可以为空。
lambda自由度很高,可以在这个函数内部调用自己想调用的函数