[QT]lambda 引用传递的小问题

问题: 

   mypushbta::mypushbta(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::mypushbta)
{
    int m=15;
    
    (QPushButton类型 btw 初始化省略)

    qDebug()<<m;
    connect(btw1,&QPushButton::clicked,this,[m]()mutable{m=110;qDebug()<<m;});
    connect(btw2,&QPushButton::clicked,this,[&m](){m=120;qDebug()<<m;});
    connect(btw3,&QPushButton::clicked,this,[&m](){qDebug()<<m;});
}

学习QT中的lambda表达式时遇到了问题:

对局部变量进行 按引用传递 时,初始值 和 原变量值不同,是一个垃圾数。

且赋值后不会改变原变量值。

简单来说:引用传递的 变量 和 原变量 已经不是同一个变量了(虽然变量名相同)

————————————————————

思路:

我们借用地址看一下构造情况。

从案例中可以看出

按引用传递地址是传过去了,可值却变成了垃圾数。

按值传递 值和原变量一样,但开辟了一个新地址。

这里需要提到的知识点:

lambda表达式中,

①按值传递参数为原变量的拷贝构造函数,不会影响原变量的值。但拷贝构造默认参数是const只读类型,修改时需要用mutable关键字强调。

②按引用传递可以看作传递原变量的地址。但局部函数的生命周期非常短。

可以看作:我们用传入的地址作为新的地址初始化,将原来的地址内容以NULL覆盖了。

————————————————

解决:

①把label这个变量做成成员变量,不要用局部变量了。

②引用传递的同时,把原值赋给地址。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值