XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


lambda表达式

目录

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