taking address of temporary错误

2023-11-19

前些天将一个项目从VS2013移植到Qt上,遇到了这样一个问题:

Dispatch->XCDispatchMessage(&linev());
//error:taking address of temporary
这段代码从VS2013通过了编译,但是到Qt上却出现了错误,于是上网百度,有一个人在编译OpenCV时也遇到了一样的问题:

cv::Mat centers;
int attempts = 1;
int flags = cv::KMEANS_PP_CENTERS;
cv::kmeans(sample_feature, k, tmp, cv::TermCriteria(), attempts, flags, ¢ers);
MyFunction myobject;
myobject.set(&CvMat(centers));//error:taking address of temporary [-fpermissive]
很明显,这都是因为引用返回的临时变量地址而引起的编译性错误。联想到之前的讨论,我将代码做了修改:

lin *plin=&linev();
Dispatch->XCDispatchMessage(plin);
结果还是一样的错误,思考了很久,我想到了这么办:

lin lin=linev();
lin *plin=&lin;
Dispatch->XCDispatchMessage(plin);
最后成功通过了编译,无警告。

从这个问题中我们可以看出使用非const引用引用返回的临时变量地址是确实不被允许的(如果使用const引用,可以延长变量生命周期到与引用同长),起码也会抛出一个警告


那这段代码为啥能在VS上通过编译呢?百度得知,这是VS2013的非标准扩展(默认打开,可关闭),自动在多种情况下扩展了被引用对象的生命周期


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

taking address of temporary错误 的相关文章

随机推荐

  • 使用Visual Studio 2019和IntelliJ IDEA 2018实现JAVA调用本地代码

    使用Visual Studio 2019和IntelliJ IDEA 2018实现JAVA调用本地代码 1 我们使用的工具是 IntelliJ IDEA 2018 编写java代码 和VisualStudio 2019 编写Native方法
  • 关于“system”: 找不到标识符 的问题

    关于 system 找不到标识符问题和 包括 排除 设置禁用了加载功能的问题 这个问题主要是使用system pause 时造成的 可以删除或者注释这个语句试试 解决办法 1 添加头文件stdlib h 2 添加iostream h 另外
  • ld_preload

    gdb调试包含共享库代码的程序 shell export LD PRELOAD 相信有不少的同志调试过包含共享库代码的程序 这个时候最为头疼的就是不能进行单步跟踪 当然是在你不知道如何解决的情况下 本文根据一个实例来讲述如何来解决这个问题
  • C++Primer(第五版 )第十三章 拷贝控制 章节编程练习答案

    13 1 拷贝构造函数是什么 什么时候使用它 答 如果一个构造函数的第一个参数是自身类类型的引用 且任何额外参数都有默认值 则此构造函数是拷贝构造函数 当使用拷贝初始化时 我们会用到拷贝构造函数 13 2 解释为什么下面的声明是非法的 答
  • JS字符串转换为JSON的四种方法

    JS字符串转换为JSON的四种方法 1 jQuery插件支持的转换方式 示例 parseJSON jsonstr jQuery parseJSON jsonstr 可以将json字符串转换成json对象 2 浏览器支持的转换方式 Firef
  • 批量获取文件的摘要(md5、sha1、sha256)

    批量获取文件的摘要 md5 sha1 sha256 0x01 功能 0x02源码 0x03运行 0x01 功能 刚刚写了一个小工具 用于批量获取文件的摘要 md5 sha1 sha256 具体用法 gt gt gt gt python3 g
  • 文件服务器中按用户查询文件夹权限,服务器文件夹权限设置

    服务器文件夹权限设置 内容精选 换一换 该任务指导用户使用Loader将数据从SFTP服务器导入到HBase 创建或获取该任务中创建Loader作业的业务用户和密码 确保用户已授权访问作业执行时操作的HBase表或phoenix表 获取SF
  • PO模式+数据驱动(TPshop网站的登录模块进行单元测试以及区分正向逆向用例)

    一 区分正向逆向用例 思路 在测试数据中添加一一个标识正向用例或逆向用例的标记 如 True False 步骤 调用登录方法 此登录方法中 只有输入用户名 输入密码 输入验证码 点击登录按钮 判断用例标记 判断安全退出是否存在 点击安全退出
  • 玩转 gpgpu sim 01记 —— try it

    1 短介绍 gpgpu sim 是一个gpu模拟器 可以让cuda openCL程序运行在一个软件模拟器上 而不需要硬件GPU 2 目标 用最简单省事的方式跑通一个gpgpu sim的仿真 3 gpgpu sim 一点项目特性 开发比较早
  • Java switch case 语句

    Java 的 switch case 语句是一种常用的控制流语句 用于基于不同的输入值执行不同的操作 本文将详细介绍 Java switch case 语句的作用 用法以及在实际工作中的应用 一 switch case 语句的作用 swit
  • QT 定时器使用事项

    情景 有一种特殊情况 一旦窗口系统事件队列中的所有事件都已经被处理完 一个定时为0的QTimer就会到时间了 这也可以用来当提供迅速的用户界面时来做比较繁重的工作 优点 QT app启动后不做任何操作 程序CPU占比已经达到90 以上 缺点
  • vue cli3 vue.config.js 配置详情

    module exports 基本路径 baseUrl process env NODE ENV production 输出文件目录 outputDir dist 默认dist 用于嵌套生成的静态资产 js css img fonts 目录
  • APK加壳原理简述

    先把核心原理记录一下 代码随后再补 PRE dex文件结构知识和加壳原理 先看下dex文件的基本结构 对于加壳主要关注3个关键字 1 checksum 文件校验码 使用alder32算法 校验文件除了maigc和checksum外余下的所有
  • 机器人编程和python的区别_机器人编程和少儿编程的区别

    随着少儿编程的大火 很多家长看懂了人工智能的未来趋势 都开始咨询少儿编程 除了少儿编程还有机器人编程 那么会有家长纠结 学哪个课程对孩子的教育发展和未来更好 那么要解决这个问题 就必须弄明白机器人和少儿编程的区别 机器人编程 在编程的基础上
  • Linux vim编辑器使用指南

    vim编辑器介绍 Vim是从vi发展出来的一个文本编辑器 代码补完 编译及错误跳转等方便编程的功能特别丰富 在程序员中被广泛使用 Vim 具有程序编辑的能力 可以主动以字体颜色辨别语法的正确性 方便程序设计 基本上 vim 共分为三种模式
  • Linux中ifconfig的使用

    ifconfig命令的全称是network interface configuring 用来配置Linux系统中的网卡信息 使用ifconfig命令配置的网卡配置信息 只是临时生效的 当网卡或者是机器重启 配置就会消失 只有通过修改配置文件
  • 分布式系统---幂等性设计

    分布式系统 幂等性设计 WEB资源或API方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用 幂等性是系统的接口对外一种承诺 而不是实现 承诺只要调用接口成功 外部多次调用对系统的影响是一致的 幂等性是分布式系统设计中的一个重要概
  • 操作系统笔记六(文件管理)

    1 文件逻辑结构 1 1逻辑结构的文件类型 分类 有结构文件 例如 PNG文件 无结构文件 1 2顺序文件 1 3索引文件 2 辅存的存储空间分配 2 1分配方式 连续分配 直接分配连续的存储空间 链接分配 隐式链接 在盘块内指定下一个盘块
  • 《华为机试》刷题之HJ88 扑克牌大小

    一 题目 二 示例 三 代码 dic 3 1 4 2 5 3 6 4 7 5 8 6 9 7 10 8 J 9 Q 10 K 11 A 12 2 13 joker 14 JOKER 15 while True try s1 s2 input
  • taking address of temporary错误

    前些天将一个项目从VS2013移植到Qt上 遇到了这样一个问题 Dispatch gt XCDispatchMessage linev error taking address of temporary这段代码从VS2013通过了编译 但是