函数返回右值的一点学习研究

https://zhuanlan.zhihu.com/p/511371573?utm_medium=social&utm_oi=939219201949429760

下面情况下不会调用:

DPoint3d fun1()
{return DPoint3d{1,2,3}; // 默认构造
}int main()
{DPoint3d&& a = fun1();a.y = 20;int i = 0;++i;
}

下面情况下,会析构:

并且有个警告,说:warning C4172: 返回局部变量或临时变量的地址

注意,是临时变量的“地址”

DPoint3d&& fun1()
{return DPoint3d{1,2,3}; // 编译:warning C4172: 返回局部变量或临时变量的地址
}int main()
{DPoint3d&& a = fun1();a.y = 20;int i = 0;++i;
}

仔细研究下,明明都被析构了,但仍然以右值的名义给带出来了,当然带出来的也是已经析构之后的变量。

但是有一个非常迷惑人的地方,刚出来的时候,还是可以赋值的,但在执行取地址的操作之后,里面的值立刻就现出原型:

struct DPoint3d
{//! x coordinatedouble x;//! y coordinatedouble y;//! z coordinatedouble z;int*p = nullptr;DPoint3d(){p = new int(5);std::cout << "DPoint3d" << endl;}DPoint3d(double _x, double _y, double _z){p = new int(5);x = _x;y = _y;z = _z;}~DPoint3d(){delete p;p = nullptr;std::cout << this << endl;std::cout << "~DPoint3d" << endl;}DPoint3d(const DPoint3d& pt){std::cout << "123" << endl;x = pt.x;y = pt.y;z = pt.z;}DPoint3d(const DPoint3d&& pt){std::cout << "456" << endl;x = pt.x;y = pt.y;z = pt.z;}DPoint3d& operator=(DPoint3d&& pt) {std::cout << "789" << endl;x = pt.x;y = pt.y;z = pt.z;}
};DPoint3d fun()
{DPoint3d a; // 默认构造a.x = 1;a.y = 2;a.z = 3;// return a; // 报错:无法将左值绑定到右值引用//return std::move(a); // 返回右值引用,没有进行构造return a; // 返回右值引用,没有进行构造
}DPoint3d&& fun1()
{return DPoint3d{1,2,3}; // 默认构造
}int main()
{DPoint3d&& a = fun1();a.y = 20;std::cout << &a << endl;int i = 0;++i;
}输出:
0000008F6D7DDA08
~DPoint3d
0000008F6D7DDA08

有个假象,其实对象已经析构了。此时的DPoint3d&& a指向的是一个已经析构过的对象。

从输出结果来看,a和fun1里面的临时 对象的地址都是一样的。

0000008F6D7DDA08
0000008F6D7DDA08

 现出真容:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3248717.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion:质量高画风清新细节丰富的二次元大模型二次元插图

今天和大家分享一个基于Pony模型训练的二次元模型&#xff1a;二次元插图。关于该模型有4个不同的分支版本。 1.5版本&#xff1a;loar模型&#xff0c;推荐底模型niji-动漫二次元4.5。 xl版本&#xff1a;SDXL模型版本 mix版本&#xff1a;光影减弱&#xff0c;减少SDXL版本…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

Postfix搭建安装教程:解决配置难题攻略!

Postfix搭建安装教程的详解&#xff01;如何优化邮件服务器性能&#xff1f; Postfix是一款广泛使用的电子邮件服务器软件&#xff0c;以其高效、可靠和安全性而闻名。许多企业和个人站点都选择Postfix来处理邮件传输任务。AokSend将提供一个详尽的Postfix搭建安装教程。 Pos…

我在高职教STM32——串口通信(1)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正是如此&#xff0c;才有了借助头条平台寻求认同感和成就感…

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

目录 引言 一、智慧水利的核心要素 1. 物联网技术 2. 大数据与云计算 3. 人工智能与机器学习 4. 移动互联网与GIS技术 5. 标准化与信息安全 二、智慧水利的优势 1. 提高水资源利用效率 2. 增强水灾害防御能力 3. 提升水环境治理水平 4. 促进水利服务智能化 三、展望…

5.6 软件工程-运维

运维 - 系统转换 运维 - 系统维护 运维 - 系统评价 真题

深入理解JVM内存管理:从区域划分到优化策略

JVM内存区域划分有哪些&#xff1f; 堆内存&#xff1a;分为新生代和老年代 新生代&#xff1a;临时对象&#xff0c;所有对象最开始都是年轻代&#xff0c;使用完会被回收或转入老年代 老年代&#xff1a;长期存在的对象 进入老年代的情况&#xff1a; 1.新生代垃圾回收超…

python ATM实现

代码要求&#xff1a; 详细代码&#xff1a; money 50000000 name input("输入您的姓名 &#xff1a;")#查询功能 def search(show_header):if show_header:print("--------查询余额--------")print(f"{name}&#xff0c;您好&#xff0c;您的余额…

模板方法原理与C++实现

定义 定义一个操作中的算法骨架&#xff08;稳定的&#xff09;&#xff0c;而将一些步骤的实现延迟到子类中&#xff08;变化的&#xff09;。模板方法使得子类可以复用一个算法的结构&#xff0c;而只改变&#xff08;重写&#xff09;这个算法的特定步骤。 C实现 class L…

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色&#xff0c;有如下几点&#xff1a; 1.可以使用对比色&#xff0c;表示强调。 2.可以使用近似色&#xff0c;使得和谐统一。 3.最好一张ppt中&#xff0c;使用的颜色不超过三种主要颜色。 但我想强调…

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…

嵌入式人工智能(9-基于树莓派4B的DS1302实时时钟RTC)

1、实时时钟&#xff08;Real Time Clock&#xff09; RTC&#xff0c;全称为实时时钟&#xff08;Real Time Clock&#xff09;&#xff0c;是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作&#xff…

N Puzzle (数字推盘游戏)

N Puzzle [数字推盘游戏] 1. 15 Puzzle2. N PuzzleReferences puzzle /ˈpʌzl/&#xff1a;n. 谜&#xff0c;智力游戏&#xff0c;疑问&#xff0c;不解之谜&#xff0c;令人费解的事 vt. 迷惑&#xff0c;使困惑1. 15 Puzzle https://en.wikipedia.org/wiki/15_puzzle The…

【Python脚本】读取execl表格域名到期时间进行筛选通过webhook进行通知

【Python脚本】读取execl表格域名到期时间进行筛选通过webhook进行通知 execl表格示例: import pandas as pd import requestsdf = pd.read_excel(D:\xx\xx\SSL.xlsx, sheet_name=None)webhook_url = "https://open.feishu.cn/open-apis/bot/v2/XXX?"for sheet_na…

高校如何拥抱国产化OS?中南民族大学信息化应用实践

CentOS 已然停服&#xff0c;数量众多的使用 CentOS 的企业以及高校&#xff0c;都面临着系统替换的迫切需求。国产化操作系统候选者众多&#xff0c;如何在兼顾原有系统兼容性的基础上&#xff0c;在国产化操作系统进行整体环境的平稳迁移&#xff0c;成为在选择 CentOS 替换方…

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…

昇思25天学习打卡营第18天|RNN实现情感分类

相关知识 情感分类 指输入一段话或句子&#xff0c;返回该段话的正向或复兴的情感分类。 text embedding 指将文本转化成向量的方法。这里的文本指词、句子、文档等文本序列。 词向量化后会将词转为二进制(独热编码)或高维实数向量&#xff0c;句子和文档向量化则将句子或文…

SpringMVC注解全解析:构建高效Web应用的终极指南 (下)

一. 引言 在上篇文章中&#xff0c;我们介绍了几个重要的SpringMVC注解&#xff1a; SpringBootApplication&#xff1a;Spring Boot项目的启动类注解。RequestMapping&#xff1a;用于映射URL到控制器类或方法&#xff0c;支持多种请求方式。RequestParam&#xff1a;用于绑…

科研绘图系列:R语言分割小提琴图(Split-violin)

介绍 分割小提琴图(Split-violin plot)是一种数据可视化工具,它结合了小提琴图(violin plot)和箱线图(box plot)的特点。小提琴图是一种展示数据分布的图形,它通过在箱线图的两侧添加曲线来表示数据的密度分布,曲线的宽度表示数据点的密度。而分割小提琴图则是将小提…

41.ILA IP核集成逻辑分析仪在线调试工具

&#xff08;1&#xff09;逻辑分析仪使用场景&#xff1a; 仿真不全面数据交互存在异步情况板卡互联可靠性问题 (2)ILA使用方法&#xff1a; 使用IP核创建ILA调试环境使用Debug标记创建IP核使用路径标记核位置调试菜单创建ILA测试环境 (3)IP核调用过程&#xff1a; 例化模…