C++编译器对临时对象的优化

news2024/11/25 20:31:32

思考:我们在构造运算符重载+号重载的时候会构造那些函数呐???

例子:小dome

 //该运算重载函数 由 左操作数调用,右操作数当做实参传递给该函数
    //触发t1+t3->t1.operator +(t3)
    Test operator +(const Test &t)
    {
        cout << "Test operator +(Test &t)" <<endl;
        Test val;//保存最后的执行结果
        val.data = this->data + t.data;
        val.ptr = new char [strlen(this->ptr) + strlen(t.ptr) + 1];
        //将分配的堆空间初始化为0
        memset(val.ptr,0,strlen(this->ptr)+strlen(t.ptr)+1);

        strcat(val.ptr,this->ptr);
        strcat(val.ptr,t.ptr);

        return val;
    }



eg:

main
{
    Test t4 = t1 + t3;
}

当调用重载函数返回了val 对象,但是随着该函数的调用结束对象val会被系统回收了,因为对象val在函数的栈上

那是如何保存值的呐????????????

这是是通过拷贝,在内存上有一块空间暂存拷贝过来的val对象,这个时候就会触发拷贝构造函数的调用,然后我们在main函数中由触发了一次拷贝构造函数

所以总共进行了两次拷贝构造函数

但是打印出来的拷贝构造函数一次都没有

  //拷贝构造函数
    Test(const Test & t)
    {
        cout << "Test(const Test & t)" << endl;
        //实现深拷贝
        this->data=t.data;
//        this->ptr = t.ptr;//浅拷贝
        if(strlen(t.ptr))
        {
            this->ptr = new char[strlen(t.ptr)+1];
            strcpy(this->ptr,t.ptr);
        }
        else
            ptr= new char[10];
    }

这是因为编译器对其进行了优化,提高了效率,想要查看的话(以Clion为例)打开Terminal模式

输入:g++ main.cpp -o main -fno-elide-constructors

输入:dirc,查看目录

此时产生了一个新的文件叫做main.exe

执行main.exe

可以看到显示调用了一次运算符重载函数

后边产生了两次构造函数

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

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

相关文章

印刷设备丝杆选择研磨杆还是冷轧杆好?

在印刷设备中&#xff0c;选择研磨杆还是冷轧杆取决于具体的使用需求和设备要求。以下是关于两种丝杆选择的要点&#xff1a; 1、精度要求&#xff1a;研磨杆通常具有更高的制造精度&#xff0c;能够有效保证印刷设备的精度和稳定性。研磨杆经过精细研磨和校准&#xff0c;具有…

Express基本接口开发-入门学习

前提推荐 任何一个新的知识都是从文档看起&#xff0c;因此express官方文档示例有必要去学习一遍。 推荐看&#xff1a; 推荐入门指南-路由指南-中间件 看完这几个内容之后心里大概知道express有些什么东西了&#xff0c;然后现在就可以去练习了 注意&#xff1a;更多示例-代…

什么猫罐头好吃?猫咪嘎嘎炫的5款猫主食罐头推荐!

想必铲屎官都知道给猫咪长期吃主食罐头的好处了吧&#xff01;主食罐头不仅营养丰富&#xff0c;还能让猫咪顺便补充水分。有时候猫咪食欲不佳&#xff0c;一罐猫主食罐头就能让它们胃口大开呢~ 作为家里有3只猫的铲屎官来说&#xff0c;养猫的这几年可以说血泪史了&#xff0…

GreenCloud VPS 重装系统后无法 SSH 的解决方法

发布于 2023-07-17 在 https://chenhaotian.top/vps/greencloud-ssh-fix/ 解决方法 发工单让客服解决即可。 操作过程 Tu Pham Operator 客服 Hello, We have fixed your problem, please try again! Thanks! Tu Pham, Senior Technician - GreenCloudVPS 17th July 2023…

微信个人号api

简要描述&#xff1a; 登录E云平台 请求URL&#xff1a; http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json 参数&#xff1a; 参数名必选类型说…

Unity--互动组件(Toggle)

1.组件的可交互 2.组件的过渡状态 3.组件的导航 4.Toggle的属性和参数设置 Toggle 切换控制是一个复选框&#xff0c;允许用户打开或关闭的一个选项&#xff1b; ”Toggle的属性和参数&#xff1a;“” Is on&#xff1a;&#xff08;开启&#xff09; 拨动开关是否从一开…

学生自助查分神秘武器

紧张刺激的期中考试落下帷幕&#xff0c;是不是期待着学生们的成绩揭晓&#xff1f;来&#xff0c;让我这个小红书博主教你&#xff0c;如何利用各种神器&#xff0c;轻松实现学生自助查询成绩&#xff01; 1代码查询&#xff1a; 有些学校已经内置了成绩查询的代码&#xff0…

日常生活小技巧 -- Visual Studio Code 简单使用

讲一下 Visual Studio Code 简单使用&#xff0c;怕以后长时间不用忘记了。 资源管理器 快捷键 ctilshiftE 搜索 快捷键 ctilshiftF 全部折叠 区分大小写、全字匹配 替换、全部替换 切换搜索详细信息 例如排除.h 和 .bat文件 *.h;*.bat源代码管理 暂存更改、放弃更…

BUUCTF 假如给我三天光明 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个zip压缩包和一张.jpg图片。 密文&#xff1a; 解题思路&#xff1a; 其实做CTF题时&#xff0c;一定要紧紧的盯着那些明显的事物&#xff0c;优先解决它们&#xff0c;而不是浪…

petalinux使用串口传输文件到板子

我ZYNQ板子无网口&#xff0c;无USB,无SD卡&#xff0c;无EMMC&#xff0c;只有串口和flash&#xff0c;为了调试处理&#xff1a; 一&#xff0c;先新建一个app&#xff0c;一起编译到根文件系统到时候一起烧写到flash里面 二&#xff0c;下载链接&#xff1a;lrzsz ./confi…

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包&#xff0c;可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画&#xff0c;以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错&#xff0c; 或者安装完 spacy&#xff0c;无法正…

物理问题中常见的分析问题----什么样的函数性质较好

物理问题中常见的积分符号位置交换问题 重极限与累次极限 高数下的定义 累次极限&#xff1a;求极限时需要遵循一定的顺序重极限&#xff1a;任意方向趋于的极限 两者之间的关系&#xff1a; 两者没啥关系存在累次极限存在而不相等的函数...... 求和符号与积分符号互换--逐项积…

python 随机密码生成器

最近在研究PySimpleGUI库&#xff0c;把之前写的一个随机密码生成器改成GUI版本发出来&#xff0c;有兴趣的兄弟们可以拿走。 因为能力有限&#xff0c;目前只能写生成一个随机密码的Gui版本&#xff0c;等我学了更多的内容再慢慢完善。 核心代码很简单&#xff0c;界面也很粗陋…

C语言从入门到精通之【字符串】

C语言没有专门用于储存字符串的变量类型&#xff0c;字符串都被储存在char类型的数组中。数组由连续的存储单元组成&#xff0c;字符串中的字符被储存在相邻的存储单元中&#xff0c;每个单元储存一个字符&#xff0c;每个字符占1个字节。 数组末尾位置的字符\0。这是空字符&am…

[Kettle] 记录处理

1.排序记录 排序是对数据中的无序记录&#xff0c;按照自然或客观规律&#xff0c;根据关键字段大小递增或递减的次序&#xff0c;对记录重新排列的过程 数据源 2019年11月月考数学成绩(Kettle数据集3).xlshttps://download.csdn.net/download/Hudas/88521681 2019年11月月考…

【10套模拟】【4】

关键字&#xff1a; 二分查找比较次数、*广义表头尾链表存储、森林转二叉树、链地址法哈希表、交换所有子树、创建二叉排序树

【10套模拟】【3】

关键字&#xff1a; 物理存储、完全二叉树、出栈入栈时间复杂度、线索二叉树

【云上探索实验室】快速入门AI 编程助手 Amazon CodeWhisperer ——码上学堂领学员招募

目录 一、Amazon CodeWhisperer1.1、大语言模型与AI编程1.2、CodeWhisperer初体验 二、云上探索实验室-码上学堂2.1、码上学堂2.2、学课通道入口 三、领学员招募3.1、报名方式3.2、领学奖励 一、Amazon CodeWhisperer 1.1、大语言模型与AI编程 大语言模型&#xff08;Large L…

如何理解 Linux 当中 “一切皆文件“

我们在 操作系统 当中的所有操作&#xff0c;包括对文件的所有操作&#xff0c;最终其实都是 通过 进程来实现的。 我们想象我们实现的各种C/C 程序&#xff0c;或者是各种语言实现的程序&#xff0c;本质上都是要 编译形成 可执行文件&#xff0c;然后操作系统把这个可执行文…

设备数据如何为预测性维护提供支持

预测性维护是现代制造业中一种高效而受欢迎的维护策略&#xff0c;它能够帮助企业提前发现设备故障的早期迹象&#xff0c;并采取相应措施&#xff0c;从而避免生产线的停机和生产效率的下降。实施预测性维护的关键在于充分利用设备数据&#xff0c;通过数据的收集、处理和分析…