c++拷贝对象时的优化问题

news2024/12/26 11:06:07

  • 博主是基于VS2019测试的,不同编译器可能情况不一样。
  • 示例分析
    • 只有传值传参
    • 传值返回
    • 一道例题

博主是基于VS2019测试的,不同编译器可能情况不一样。

看下面这一个类A:

class A
{
public:
	A(int a = 0)
		:_a(a)
	{
		cout << "A(int a = 0)" << endl;
	}

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

	~A()
	{
		cout << "~A()" << endl;
	}

	A& operator= (const A& aa)
	{
		cout<<"	A& operatoor = (const A & aa)" <<endl;
		if (this != &aa)
		{
			_a = aa._a;
		}

		return *this;
	}

private:
	int _a;
};




void f1(A aa)
{}

A f2()
{
	A aa;
	return aa;
}

示例分析

只有传值传参

// 传值传参
A aa1;
f1(aa1);
cout << endl;    //一次构造,一次拷贝构造

在这里插入图片描述


直接优化例子:


// 隐式类型,连续构造+拷贝构造->优化为直接构造
f1(1); 

在这里插入图片描述


// 一个表达式中,连续构造+拷贝构造->优化为一个构造
f1(A(2));    
cout << endl;

在这里插入图片描述

传值返回


// 传值返回
f2();    //   1次 构造一次 + 1次 拷贝构造
cout << endl;

在这里插入图片描述

按道理说是1次构造+2次拷贝构造,但是编译器在遇到这种连续的拷贝构造,会自动优化成1次拷贝构造。


	// 一个表达式中,连续拷贝构造->优化为一个拷贝构造
	A aa1 = f2();
	cout << endl;

在这里插入图片描述

在这里插入图片描述


// 一个表达式中,连续拷贝构造+赋值重载->无法优化
A aa1;
aa1 = f2();
cout << endl;

在这里插入图片描述
在这里插入图片描述

一道例题

void f1(A aa)
{}

A f2()
{
	A aa;
	return aa;
}
A f(A u)
{
	A v(u);
	A w = v;
	return w;
}
int main()
{
	A x;
	A y = f(f(x));
}

请问调用了几次构造和拷贝构造?
1次构造和7次拷贝构造

在这里插入图片描述
调用示例如图所示:
在这里插入图片描述

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

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

相关文章

通过stream流实现分页、模糊搜索、按列过滤功能

通过stream实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后&#xff0c;需要经过一定的逻辑处理才进行前端展示&#xff0c;这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…

Win7开机进入修复界面处理方法

Win7开机进入修复界面处理方法 2023-09-18 呓语煮酒 大家在使用Windows7的时候是否出现过这样一个问题&#xff0c;就是电脑开机后进入修复界面&#xff0c;界面如下&#xff1a; 一般出现这样的问题基本都是电脑主机非正常关机导致的。一般家用主机都是按照正常关机&#xf…

浅谈C++|STL之deque篇

一.deque基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端插入删除操作 deque与vector区别: vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低deque相对而言&#xff0c;对头部的插入删除速度回比vector快vector访问元素时的速度会比d…

Linux高性能服务器编程 学习笔记 第四章 TCP/IP通信案例:访问Internet上的Web服务器

Web客户端和服务器之间使用HTTP协议通信。 我们按以下方式来部署通信实例&#xff1a;在Kongming20上运行wget客户端程序&#xff08;一个在命令行下使用的网络下载工具&#xff0c;它支持通过HTTP、HTTPS和FTP协议下载文件&#xff09;&#xff0c;在ernest-laptop上运行squi…

udp的简单整理

最近思考udp处理的一些细节&#xff0c;根据公开课&#xff0c;反复思考&#xff0c;终于有所理解&#xff0c;做整理备用。 0&#xff1a;简单汇总 1&#xff1a;udp是基于报文传输的&#xff0c;接收方收取数据时要一次性读完。 2&#xff1a;借助udp进行发包&#xff0c;…

车载软件架构 —— AUTOSAR Vector SIP包(一)

车载软件架构 —— AUTOSAR Vector SIP包(一) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在…

uniapp项目实践总结(十六)自定义下拉刷新组件

导语&#xff1a;在日常的开发过程中&#xff0c;我们经常遇到下拉刷新的场景&#xff0c;很方便的刷新游览的内容&#xff0c;在此我也实现了一个下拉刷新的自定义组件。 目录 准备工作原理分析组件实现实战演练内置刷新案例展示 准备工作 在components新建一个q-pull文件夹…

机器学习算法基础--Generalized Linear Regression Model

目录 1.数据的处理及查看 2.数据的处理及可视化 3.模型的创建与拟合 4.算法可视化效果图 5.多维度模型可视化 线性回归讲了很多次了&#xff0c;广义线性回归无非就是拟合的多项式曲线的次数的变化&#xff0c;就不再推导公式和算法流程了。 1.数据的处理及查看 import num…

人工智能轨道交通行业周刊-第60期(2023.9.11-9.17)

本期关键词&#xff1a;巡检机器人、重庆最强大脑、数字铁路规划、高铁起步、Baichuan 2大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…

​使用拥抱脸的稳定扩散世界 — 使用文本提示创建 AI 生成图像的扩散器库​

一、简介 你可能已经看到人工智能生成的图像有所增加&#xff0c;这是因为潜在扩散模型的兴起。简单来说&#xff0c;稳定扩散是一种深度学习模型&#xff0c;它可以在给定文本提示的情况下生成图像。 图1&#xff1a;稳定扩散概述 从上图可以看出&#xff0c;我们可以传递文本…

一次Python无法安装模块的问题探索与解决之旅

源起 在Windows 10系统中安装 Python 3.11.5版本&#xff08;目前最新版&#xff09;并安装模块 (比如flask)&#xff0c;安装步骤很简单&#xff1a; 到官方下载安装档https://www.python.org/downloads/点击安装文件安装Python到命令行执行 pip install packagename 安装扩…

基于SpringBoot的图书商城系统

基于SpringBootVue的网上书城系统、图书商城、网上书店系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1…

STM32F4X SPI W25Q128

STM32F4X SPI W25Q128 什么是SPISPI的特点SPI通信引脚SPI接线方式SPI速率SPI通信方式SPI时钟相位和时钟极性 STM32F4X SPISTM32F4X SPI配置STM32F4X SPI频率 W25Q128W25Q128存储结构W25Q128读写操作W25Q128常用指令读取ID命令(0x90)写使能命令(0x06)禁止写使能命令(0x04)读取W2…

7.前端·新建子模块与开发(自动生成)

文章目录 学习地址视频笔记自动代码生成模式开发增删改查功能调试功能权限分配 脚本实现权限分配 学习地址 https://www.bilibili.com/video/BV13g411Y7GS/?p15&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 视频笔记 自动代码生成模式开发 …

30分钟吃掉YOLOv8实例分割范例

本范例我们使用 torchkeras来实现对 ultralytics中的YOLOv8实例分割模型进行自定义的训练&#xff0c;从而对气球进行检测和分割。 尽管ultralytics提供了非常便捷且一致的训练API&#xff0c;再使用torchkeras实现自定义训练逻辑似乎有些多此一举。 但ultralytics的源码结构相…

大众冰球运动水平等级评价规范

声明 本文是学习GB-T 42371-2023 大众冰球运动水平等级评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了大众冰球运动水平的等级和评价程序&#xff0c;规定了等级评价的总体要求以及评价要素、评 价要求&#xff0c;描…

408数据结构算法题目

408数据结构算法题目 408数据结构算法题目一、2020-411.1 题目描述1.2 分析1.3 代码1.3.1 暴力美学1.3.2 贪心 408数据结构算法题目 一、2020-41 1.1 题目描述 2020-41 41.(13分&#xff09; 定义三元组&#xff08;a,b,c)(a,b,c均为正数&#xff09;的距离D|a-b||b-c||c-a…

C++学习笔记--项目知识点集合

一、同步IO、异步IO、阻塞IO、非阻塞IO 首先来看看两种I/O的定义&#xff1a;同步I/O和异步I/O 同步&#xff08;阻塞&#xff09;I/O&#xff1a;在一个线程中&#xff0c;CPU执行代码的速度极快&#xff0c;然而&#xff0c;一旦遇到IO操作&#xff0c;如读写文件、发送网络…

【LeetCode-简单题KMP】459. 重复的子字符串

文章目录 题目方法一&#xff1a;移动匹配方法二&#xff1a;KMP算法 题目 方法一&#xff1a;移动匹配 class Solution {//移动匹配public boolean repeatedSubstringPattern(String s) {StringBuffer str new StringBuffer(s);//ababstr.append(s);//拼接一份自己 abababab…

TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解

大家好&#xff0c;本文结合具体的问题实例&#xff0c;详细讲解一下TCP/IP协议栈的心跳机制、丢包重传机制等内容&#xff0c;给大家提供一个借鉴和参考。 1、问题概述 虽然软件底层模块在网络恢复后能自动重连上服务器&#xff0c;但会议因为网络问题已经退出&#xff0c;需…