C++---类的优化构造

首先,先介绍以下拷贝构造和构造的区别。

拷贝构造Date(Date& d)初始化:用一个实例对象去初始化一个未初始化的对象,

例:如果d1未被实例化,则Date d1 = d2; 也会被编译器认为拷贝构造,进而调用Date(Date& d);

构造Date(int year=0,int month =0,int day = 0)。

赋值运算符重载指的是用已经实例化的类去赋值给另一个已经实例化的类。

1.优化是怎么进行的

优化在于编译器,省略创建临时变量,直接将返回值传回调用函数所在的行中。重点记住连续拷贝构造+赋值重载时无法优化,要一步步进行。

2.优化结果

2.1代码

#include<iostream> 
using namespace std;
class A
{
public:
    A(int a = 0)
        :_a(a)
    {
        cout << "A(int a)" << endl;
    }

    A(const A& aa)
        :_a(aa._a)
    {
        cout << "A(const A& aa)" << endl;
    }

    A& operator=(const A& aa)
    {
        cout << "A& operator=(const A& aa)" << endl;

        if (this != &aa)
        {
            _a = aa._a;
        }

        return *this;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }
private:
    int _a;
};

void f1(A aa)
{	
} 
void f2()
{
	A aa;
	return aa;
}
void  Func1(A aa)
{
}

void Func2(const A& aa)
{
}
//
//A Func3()
//{
//	A aa;
//	return aa;
//}
//
//A& Func4()
//{
//	static A aa;
//	return aa;
//}

//int main()
//{
	A a1;
	Func1(a1);
	Func2(a1);
//	
//	//Func3(); 
//	A a1 = Func4();
//	
//	return 0;
//}

//A Func5()
//{
//	A aa;
//	return aa;
//}

int main()
{
//	A ra1 = Func5();  //拷贝构造+拷贝构造--》优化为拷贝构造
//	cout <<"=============="<<endl;
//	A ra2;
//	ra2 = Func5();
	
//	A aa1;
//    Func1(aa1); 
	// 不会优化,因为函数形参没有引用,会使用拷贝构造 
	Func1(1);
	
	
//	Func1(A(1)); // 构造+拷贝构造 ->优化为构造
//    Func1(1);    // 构造+拷贝构造 ->优化为构造
//	A aa2 = 1;  // 构造+拷贝构造 ->优化为构造
	
	return 0; 
}

3.explicit

当调用的函数使用explicit修饰时,无法优化的同时会报错,因此在在此时调用函数无法进行隐式类型转换。如:

下面explicit的作用和用法:

1. -- 禁止隐式类型转换

2. -- 使用explicit关键字注意事项

explicit关键字只能用于类内部的构造函数声明上,在类的定义体外部所做的定义上不在重复它

下面是使用案例:

#include<iostream> 
using namespace std;
class A
{
public:
    explicit A(int a = 0)
        :_a(a)
    {
        cout << "A(int a)" << endl;
    }

    A(const A& aa)
        :_a(aa._a)
    {
        cout << "A(const A& aa)" << endl;
    }

    A& operator=(const A& aa)
    {
        cout << "A& operator=(const A& aa)" << endl;

        if (this != &aa)
        {
            _a = aa._a;
        }

        return *this;
    }

    ~A()
    {
        cout << "~A()" << endl;
    }
private:
    int _a;
};

void  Func1(A aa)
{
}
int main()
{
	Func1(1);
	return 0; 
}

编译时会报错,说明无法进行隐式转换

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧工地建筑施工项目管理平台源码,实现人员劳务实名制管理、区域安防监控、智能AI识别、用电/水监控、噪音扬尘监测、现场物料管理等功能

智慧工地管理系统源码&#xff0c;智慧工地云平台源码&#xff0c;PC端APP端源码 智慧工地管理平台实现对人员劳务实名制管理、施工进度、安全管理、设备管理、区域安防监控系统、智能AI识别系统、用电/水监控系统、噪音扬尘监测、现场物料管理系统等方面的实时监控和管理&…

帝国cms中如何让外部链接直接从新窗口打开页面

<?php if($bqr[isurl]) { ?> <a href"<?$bqsr[titleurl]?>" target"_blank"> <?php } else { ?> <a href"<?$bqsr[titleurl]?>"> <?php } ?>

华硕荣获“EPEAT Climate+ Champion”永续先驱称号

华硕持续深耕永续理念&#xff0c;努力提供低碳排放、高效能产品&#xff0c;并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺&#xff0c;并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…

工资10K,副业20K,这届程序员搞副业真野

最近刚完成了一个远程外包项目工作&#xff0c;钱刚到账&#xff0c;小金库又添了一笔&#xff1a; 从一开始的15K死工资&#xff0c;到现在的主业副业一共25K收入&#xff0c;最近的经济压力小了很多&#xff0c;终于也有闲钱和老婆去旅旅游&#xff0c;升级一下外设&#xff…

Linux学习教程(第一章 简介)3

第一章 简介 七、Linux系统的优缺点 前面章节提到&#xff0c;相比 Windows 系统&#xff0c;Linux 系统有更好的稳定性&#xff0c;那么除此之外&#xff0c;Linux 系统还有那些优点&#xff08;或者不足&#xff09;呢&#xff1f;本节带领大家详细了解一下。 1、大量的可…

【CASS精品教程】cass3d基于DOM和DEM生成倾斜三维模型

和EPS一样&#xff0c;cass3d也可以生成三维模型。本文讲解 cass3d基于pix4d生成的正射影像DOM和DSM生成倾斜三维模型&#xff0c;并进行三维测图。 一、三维倾斜模型打开 打开cass11.0软件&#xff0c;打开三维窗口&#xff0c;点击打开模型&#xff0c;选择基于dom和dsm生成…

keepalived+Nginx+邮件

实验场景&#xff1a; 我使用keepalived保证nginx的高可用&#xff0c;我想知道什么时候ip发生漂移&#xff0c;可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解&#xff0c;这有详细解释&#xff1a;keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…

中国智能驾驶的“突围赛”打响,这家本土厂商为何能成为“先行者”?

中国本土厂商正在成为全球智能汽车产业链的“核心力量”。 根据《高工智能汽车研究院》数据显示&#xff0c;今年1-6月&#xff0c;自主品牌标配L2&#xff08;含L2&#xff09;级辅助驾驶交付新车155.34万辆。其中&#xff0c;搭载中国本土智能驾驶解决方案提供商&#xff08…

【LeetCode】每日一题 2023_11_11 情侣牵手(并查集/贪心)

文章目录 刷题前唠嗑题目&#xff1a;情侣牵手题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 好好好&#xff0c;这么玩是吧&#xff0c;双十一出道情侣牵手 题目&#xff1a;情侣牵手 题目链接&#xff1a;765…

C++ static关键字

C static关键字 1、概述2、重要概念解释3、分情况案例解释3.1 static在类内使用3.2 static在类外使用案例一&#xff1a;案例二&#xff1a;案例三 1、概述 static关键字分为两种情况&#xff1a; 1.在类内使用 2.在类外使用 2、重要概念解释 &#xff08;1&#xff09;翻译…

初识RabbitMQ - 安装 - 搭建基础环境

RabbitMQ 各个名词介绍 Broker&#xff1a;接收和分发消息的应用&#xff0c;RabbitMQ Server 就是 Message Broker Virtual host&#xff1a;出于多租户和安全因素设计的&#xff0c;把 AMQP 的基本组件划分到一个虚拟的分组中&#xff0c;类似于网络中的 namespace 概念。当…

【Java】智慧工地云平台源码支持多端展示(PC端、手机端、平板端)

智慧工地系统实现工地的数字化、精细化、智慧化生产和管理。 一、智慧工地发展趋势 1.更加智能 未来的智慧工地系统将逐步植入人工智能和虚拟现实等高科技技术以更为智慧的方式&#xff0c;来实现岗位人员与工地现场的交互与配合。智慧工地系统能够在工程全生命周期管理的过程…

单挑特斯拉,华为智选车迈入第二阶段

文丨刘俊宏 编丨王一粟 华为智选车的节奏越来越快。 11月9日&#xff0c;华为跟奇瑞打造的首款C级纯电轿车智界S7发布&#xff0c;预售价为25.8万起。 在发布会上&#xff0c;华为常务董事、终端BG CEO、智能汽车解决方案BU董事长余承东采取手机以往最惯用的对标营销手法&a…

激光雷达标定板是自动驾驶系统中关键部件

中国政府制定了多项产业发展规划&#xff0c;包括《汽车产业中长期发展规划》和《新一代人工智能发展规划》等&#xff0c;旨在推动汽车产业的转型升级&#xff0c;培育具有国际竞争力的汽车品牌&#xff0c;同时鼓励企业加大对自动驾驶技术研发的投入&#xff0c;加快自动驾驶…

StartUML的基本使用

文章目录 简介和安装创建包创建类视图时序图 简介和安装 最近在学习一个项目的时候用到了StartUML来构造项目的类图和时序图 虽然vs2019有类视图&#xff0c;但是也不是很清晰&#xff0c;并没有生成uml图&#xff0c;但是宇宙最智能的IDE IDEA有生成uml图的功能 下面就简单介…

Mac下eclipse配置JDK

一、配置JDK&#xff0c;需要电脑下载Java并且配置环境 Mac环境配置&#xff08;Java&#xff09;----使用bash_profile进行配置&#xff08;附下载地址&#xff09; (1)、左上角找到“Eclipse”-->“Preferences...” (2)、找到“Java”-->“Installde JREs”-->界…

C语言计算字符串中数字字符的个数

文章目录 1-9题前言例题10例题11答案例题10答案答案1答案2 例题11答案 1-9题 C语言基础例题1-3题-指针篇 C语言基础例题4-5题-二维数组篇 C语言基础例题6-7题-结构体篇 C语言基础例题8-9题-大作业篇 前言 下列题目需要学习字符串、指针后才可练习。 例题10 请编写一个程序…

【完美世界】云曦限定皮肤成意难平,受广泛赞誉,算是大获成功

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界》最新资讯。近期&#xff0c;《完美世界》的热度直线上升&#xff0c;超越了其他国漫和电视剧&#xff0c;登顶平台畅销榜第一&#xff0c;观众们更是将其与巅峰时期的《斗罗大陆》相提并论…

基于SSM的电子病历系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

关于Google Play应用商店的优化技巧1

作为Google Play商店ASO策略的一部分&#xff0c;我们需要查明并优化有助于应用排名的各种因素。在这里将介绍几个可以增强我们列表并增加在搜索中被发现的机会的技巧。 1、优化标题和描述字段。 在创建有效的Google Play商店列表时&#xff0c;我们应该考虑的第一个元素是应用…