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

news2024/11/20 11:38:36

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

拷贝构造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; 
}

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

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

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

相关文章

Springboot+vue的企业资产管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的企业资产管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业资产管理系统&#xff0c;采用M&#xff08;model&a…

Shopee店铺支付方式有哪些? Shopee自养号测评提高产品曝光率的有效方法

Shopee作为一家领先的电子商务平台&#xff0c;如何优化你的Shopee店铺商品再结合自养号测评&#xff0c;并提高曝光率和销售能力&#xff0c;其中支付是至关重要一环之一。 虾皮为卖家提供了多种收款方式&#xff0c;包括在线支付、虚拟账户余额和线下支付。市场适应性也是卖…

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

&#x1f38f;在不同的命名空间变量名可相同 创建(如下方代码块) &#x1f384;分析一下构成 &#x1f388;-1- namespace 关键字命名空间 &#x1f388;-2- wm9 空间名称 &#x1f388;-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

概念解析 | 认知战:21世纪的新战争形式

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:认知战 概念解析 | 认知战:21世纪的新战争形式 背景介绍 随着科技的飞速发展,信息技术深深渗透到各个领域,信息已经成为一种重要的战略资源。传统的战争形式主要依靠武力进攻,…

短视频矩阵seo系统源码搭建----技术定制化开发

一、需要遵循一下技术开发步骤&#xff1a; 1. 确定需求和功能&#xff1a;明确系统的主要目标和需要实现的功能&#xff0c;包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构&#xff1a;根据需求和功能确定系统的架构&#xff0c;包…

【CCF-C解刊】4区逆袭到1区TOP,这本期刊实力强劲,34天录用,7天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读&#xff0c;这本期刊从4区逆袭成为中科院1区&#xff08;TOP&#xff09;&#xff0c;如此实力强劲的期刊&#xff0c;究竟如何&#xff1f; 如有相关领域作者有意向投稿&#xff0c;可作为重点关注&…

C++进阶-STL stack容器的简单认识

STL stack容器的简单认识 stack基本概念stack常用接口构造函数赋值操作数据存取大小操作 stack基本概念 stack是一种 先进后出 (First In Last out, FILO)的数据结构&#xff0c;它只有一个出口 栈只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为 栈中进…

Error: “+“ and “-“ must be surrounded by whitespace in calculations.

加减之前一定要空格 改之前&#xff1a; 改之后&#xff1a; 然后就完美解决啦

2023美团外卖商超药店月销量

数据包含&#xff1a;外卖商超、药店商品月销量、含商品skuid、规格spuid等内容 资源下载 ​​​​​​​https://download.csdn.net/download/WANJIAWEN1002/88444367?spm1001.2014.3001.5503

金融服务行业如何面对精细化的大数据模式下日益增加的文件传输压力?

随着数字化转型的加速&#xff0c;金融机构需要在数据化基础上进行升级和转型&#xff0c;挖掘互联网数据传输与金融业深度融合的新形态&#xff0c;同时确定如何更好地存储、保护和分析数据。然而&#xff0c;在精细化的大数据模式下&#xff0c;金融机构也面临着日益增加的数…

地推网推必备app拉新平台 又升级啦 一手官签渠道

今天地推网推必备app拉新平台 ”聚量推客“ 又升级啦 一手邀请码 000000 今天升级了什么呢&#xff1f; 针对地推和网推作业人员升级了团队管理和做单excel导出功能&#xff0c;更好得查看自己和团队的作业情况&#xff0c;这个功能是地推和网推的一个必备功能

直播间自动评论神器的运行分享,与开发需要到的技术分析

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 随着互联网的发展&#xff0c;直播带货越来越受欢迎。为了更好地服务观众&#xff0c;许多直播间开始使用自动回复机器人。本文将介绍直播间自动回复机器人需要用到的技术和流程。…

spring命名空间注入和XML自动装配、引入外部配置文件

Spring p命名空间注入util命名空间注入基于XML的自动装配根据名称自动装配 Spring引入外部属性配置文件 p命名空间注入 作用&#xff1a;简化配置。 使用p命名空间注入的前提条件包括两个&#xff1a; ● 第一&#xff1a;在XML头部信息中添加p命名空间的配置信息&#xff1a…

88.Linux系统下关于fork的经典练习

题目描述 下列程序输出几个A&#xff1f; 运行结果 输出6个A 根据代码段仔细执行&#xff0c;注意for循环的i的值即可得出答案 下列程序输出几个A&#xff1f; (这个printf后面是不带\n也就是说不刷新缓冲区) 运行结果 输出8个A&#xff0c;要注意到此程序的printf语句没有…

Python制作国旗头像

今天教大家用几行代码快速实现一个国庆风头像&#xff0c;效果是这样的 素材&#xff1a;一张头像、一张国旗图片 思路&#xff1a;将国旗图片的每个像素点的透明度从左至右&#xff0c;从上到下逐次递减后&#xff0c;将其盖在头像上面就形成了最终的效果图。 完整代码&…

个人app编程的好处及条件

1.概要 2.个人app编程目标 开发手机软件&#xff0c;类似微信、qq等软件应用&#xff0c;解决人们日常生活问题 例如&#xff1a; 1&#xff09;你可以&#xff0c;自己开发一个网站&#xff0c;管理自己的日常生活照片&#xff0c;防止哪一天手机掉了或丢了&#xff0c;照片…

安装Node的包管理 工具Nvm之后,不能正确下载在所需要的node版本

使用命令行&#xff1a;nvm install 14.14.0 下面一直都是再运行中&#xff0c;没有任何反应 解决方法为&#xff1a; 增加nvm的下载镜像&#xff0c;一般使用淘宝的镜像 以下是在 Windows 上设置 NVM 下载镜像的步骤&#xff1a; 查看当前 NVM 配置&#xff1a; 在命令提示…

4种最常用的LLM应用文本分块策略

在构建 LLM 应用程序时&#xff0c;分块&#xff08;Chunking&#xff09;是将大块文本分解成更小的片段的过程。 这是一项重要的技术&#xff0c;一旦我们使用LLM嵌入内容&#xff0c;它有助于优化我们从矢量数据库返回的内容的相关性。 在这篇博文中&#xff0c;我们将探讨它…

什么是网络中的服务质量 (QoS)?

什么是服务质量&#xff08;QoS&#xff09; 服务质量&#xff08;QoS&#xff09;是网络中用于管理质量并确定数据流量传输优先级的机制。它确保不同类型的数据流量&#xff0c;如语音、视频和数据&#xff0c;获得适当的服务水平。其主要目标是使网络和组织能够对流量进行优…

亚马逊是如何风控虚假交易操控评论的?稳定的测评系统的重要性。

稳定的亚马逊测评系统重不重要&#xff1f; 亚马逊平台对测评行为的打击力度十分严格&#xff0c;堪称所有电商平台中最严格的一个。许多人可能会好奇&#xff0c;采用的是真人测评&#xff0c;由真实的客户群体购买产品后进行评价&#xff0c;这种模式难道也会存在风险吗&…