QT中connect函数中的lambda表达式关于局部变量的按值拷贝与按引用拷贝,以及mutable关键字

2023-10-29

 

1.当lambda表达式中使用[=](){}时,为按值拷贝作用范围的局部变量,默认不可修改按值传进来的拷贝。

   如图:不加mutable时报错,a不可改变

加mutable后可以改变a值,但是时修改的拷贝对象,connect上边的a值未修改。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    int a = 10;
    connect(ui->pushButton,&QPushButton::clicked,[=]()mutable{
        a += 2;
        qDebug() << "按钮1下的a:" << a;
    });
    connect(ui->pushButton_2,&QPushButton::clicked,[=]()mutable{

        qDebug() << "按钮2下的a:" << a;
    });
}

如下图,为验证结果:

2.至于[&](){}是按引用传递,不过如果使用这个来传递会出现如下情况:

这是因为构造函数执行完之后,局部变量a被释放了。a的地址被记录在槽函数中,但是值被改变了。

 

我之前一直傻傻的认为mainwindow的构造是在关闭ui后才结束,因为我认为程序都被包裹在里边了。看来我错了。。。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT中connect函数中的lambda表达式关于局部变量的按值拷贝与按引用拷贝,以及mutable关键字 的相关文章

随机推荐

  • Jeff Atwood质疑iPhone的单键设计

    我喜欢使用iPhone 但我对它的一个设计不敢苟同 苹果始终坚持 设备的正面永远只能有一个按键 我还买了一个Kindle Fire 它更离谱 一个按键都没有 我完全赞成 任何小器具的正面都应该在明显的位置上至少有一个 耶稣把手 一样的按键
  • Tomcat出现404的解决方法[类型 状态报告 消息 请求的资源[/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源]

    解决idea的web项目tomcat启动后无法加载index jsp文件 404 问题 使用servlet是正常的 可以用以下解决方式 打开项目设置Project Structure 点击进入Project Settings下的Facets
  • AI智能图像识别的工作原理及行业应用

    AI智能图像识别 人工智能 AI 的一部分 是当今一个正在蓄势待发的人工智能大趋势 富维图像也正在从事图像识别技术研发和应用 数据显示 人工智能图像识别市场规模已达到近390亿美元 所以AI智能图像识别技术已经存在我们的工作以及生活环境当中
  • paxos算法java实现_基于python的Paxos算法实现

    理解一个算法最快 最深刻的做法 我觉着可能是自己手动实现 虽然项目中不用自己实现 有已经封装好的算法库 供我们调用 我觉着还是有必要自己亲自实践一下 这里首先说明一下 python这种动态语言 对不熟悉的人可能看着比较别扭 不像java那样
  • 使用truss、strace或ltrace诊断软件问题

    进程无法启动 软件运行速度突然变慢 程序的 Segment Fault 等等都是让每个Unix系统用户头痛的问题 本文通过三个实际案例演示如何使用truss strace和ltrace这三个常用的调试工具来快速诊断软件的 疑难杂症 trus
  • 生成树协议

    生成树协议 生成树协议是一基于OSI网路模型的数据链路层 第二层 通讯协定 用作确保一个无回圈的区域网络环境 通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的 同时具备链路的备份功能 又称扩展树协定 在一个二层交换网络中 生成一棵
  • Graphviz的使用

    一 背景 最近想画一些架构 流程图之类的 有些图形比较负责 画起来比较费时间 就找了个简单工具辅助自己画图 Graphviz画的图比较简单 凑合能用 优点就是快适合程序员使用 二 安装 官方网站 https graphviz gitlab
  • java字符串不足长度自动补0

    1 方法一 import org apache commons lang3 StringUtils StringUtils leftPad String str int size String padStr 例子 StringUtils l
  • Quartus中的unused pin设置

    在逻辑可编程器件中并不是每个引脚都会用到 对于没有用到的引脚 我们也可以通过设置Quartus II software gt assignments gt settings gt devices gt unused pins把它们设置为需要
  • GLSL中Uniform块

    Uniform块 当着色器程序变复杂时 用到的uniform变量数量也会上升 通常会在多个着色器程序中用到同一个uniform变量 由于uniform变量的位置是着色器链接的时候产生的 也就是glLinkProgram 的时候 因此它在应用
  • SQL新用户留存分析

    表 用户登录日期区间表 dws app user act rng 2020 09 04 前一天 其中9999 12 31代表计算当天也登录过 用户日活表 dws app trf agr user 2020 09 05 新一天 需求 求出用户
  • 【2022最新Java面试宝典】—— ZooKeeper面试题(28道含答案)

    目录 1 ZooKeeper 是什么 2 ZooKeeper 提供了什么 3 Zookeeper 文件系统 4 ZAB 协议 5 四种类型的数据节点 Znode 6 Zookeeper Watcher 机制 数据变更通知 7 客户端注册 W
  • sublime搭建C/C++编译环境(超完美的配置并配上内容详细讲解!!)

    sublime搭建C C 编译环境 超完美的配置并配上内容详细讲解
  • 证书服务 笔记

    1 www verisign com www ssl com www godaddy com www wosign com 2 转载于 https www cnblogs com emmagikyo p 5292820 html
  • Unexpected token o in JSON at position 1 报错原因及解决方法

    Unexpected token o in JSON at position 1 报错原因及解决方 问题描述 在做登录页面 实现登录功能 返回token值时 提示 Unexpected token o in JSON at position
  • Burst(突发)信号详解

    突发信号是一个根据字面意思非常难以理解的信号 为此头疼了好久 终于理解了什么是突发信号 突发是指在同一行中相邻的存储单元连续进行数据传输的方式 连续传输所涉及到存储单元 列 的数量就是突发长度 SDRAM 简称BL burst length
  • EQ均衡器原理

    做音乐最离不开的效果器是什么 相信大多数朋友都会回答 是EQ 不错 正是有了这个所谓 均衡 的效果器 我们的音乐才不会过载 乐器音色才会如此丰富 然而知道1加1等于2更要知道1加1为什么等于2 今天我把这个效果器扒光 从根本上来分析它的工作
  • my-innodb-heavy-4G.cnf配置文件详解

    client 客户端 port 3306 客户端连接端口 socket tmp mysql sock 客户端套接字文件的路径 mysqld port 3306 服务器监听端口 socket tmp mysql sock 服务器套接字文件的路
  • 做自动化测试可选择的工具有哪些?

    如今 作为一名软件测试工程师 几乎所有人都需要具备自动化测试相关的知识 并且懂得如何去利用工具 来为企业减少时间成本和错误成本 这是为什么呢 在以前 会测试人员一般都只需要扮演终端用户 会做手动测试用例并记录观察结果就足够了 但如今 一旦你
  • QT中connect函数中的lambda表达式关于局部变量的按值拷贝与按引用拷贝,以及mutable关键字

    1 当lambda表达式中使用 时 为按值拷贝作用范围的局部变量 默认不可修改按值传进来的拷贝 如图 不加mutable时报错 a不可改变 加mutable后可以改变a值 但是时修改的拷贝对象 connect上边的a值未修改 include