我是靠谱客的博主 无语荔枝,最近开发中收集的这篇文章主要介绍[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这个变量做成成员变量,不要用局部变量了。

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

最后

以上就是无语荔枝为你收集整理的[QT]lambda 引用传递的小问题的全部内容,希望文章能够帮你解决[QT]lambda 引用传递的小问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部