lambda表达式
[capture](params) opt-> ret{body;};
- capture: 捕获列表
- params: 参数列表
- opt: 函数选项
- ret: 返回值类型, 可以返回
- body: 函数体
在后面再加上一个括号相当于直接调用这个函数
捕获的方式有以下几种
- [ ]: 不捕获任何变量
- [&]: 捕获外部作用域的所有变量, 作为引用在函数中使用, 按照引用进行捕获
- [=]: 捕获外部作用域的所有变量, 作为副本在函数中使用, 按照值进行捕获
- [=, &foo]: 按照值捕获作用中的所有变量, 但是按照引用进行捕获foo变量
- [bar]: 按照值进行捕获bar, 不捕获其他的变量
- [this]: 捕获this指针, 让函数有当前类相同的访问权限, 如果已经有了&或者=就默认添加这一个
使用关键字mutable可以修改值传递传进来的值
connect(myBtn, &QPushButton::clicked, this, [m] ()mutable { m = 100 + 10; qDebug() << m; });
修改的是值, 不是本来的对象
connect(btn, &QPushButton::clicked, this, [=](){
emit zt->hungry("ji");
});
可以在这个里面调用多个函数, 并且不受参数的限制
参数的第三个是this, 第四个是lambda表达式的时候可以把this省略掉
==注==: 一般使用值传递, 使用引用传递可能会出bug