C嘎嘎~~[谈谈C++的一些优化]

C++的一些优化

  • 匿名对象
  • 引用
    • 引用作形参
    • 引用作返回值
  • 编译器优化
    • 构造 + 拷贝构造 ⇒ 构造
    • 拷贝构造 + 拷贝构造 ⇒ 一个拷贝构造

匿名对象

通过以前C语言的学习, 我们知道了有一种 具有临时性的, 没有名字的变量 — — 匿名变量.
那么我们的对象应该也有这个特性 — — 匿名对象

匿名对象, 即没有名字的对象, 生命周期就在当行

匿名对象的一般表现方式👇👇👇

// 有默认构造函数
A()

// 有参构造
A(10,20)

🗨️证明一下, 匿名对象的生命周期就在当行??



  • 根据上面的结果显示, 匿名对象调用构造函数后, 下一行就会调用析构函数 — — 匿名对象的生命周期就是在当前行.

🗨️ 老陈, 匿名对象的生命周期这么短, 能有什么用处?

  • 可以不用对象调用成员函数

🗨️老陈, 我用下面的例子怎么不行?

  • 所有的临时对象都具有常性, 故匿名对象也是具有常性的
    ⇒ 这里应该用常引用, const &

    🗨️ 不是匿名对象具有常性, 离开这一行就会销毁吗⇒ 那这个tem引用就不是野引用吗??
  • 针对这种情况, 我们的祖师爷就把这种用const引用修饰的匿名对象延长了生命周期, 把它的生命周期延长至当前函数局部域⇒ 所以上面的tem引用就不是野引用

在以后我们会学习一种字符串类 string
看看下面的三种操作, 你会使用哪一种操作👇👇👇

#include<iostream>
#include<string>

using namespace std;

void push_back(const string& tem)
{
	cout << "push_back(const string& tem)" << endl;
}

int main()
{
	
	string str1 = "666666";
	push_back(str1); // 通过对象调用

	push_back(string("666666"")); // 匿名对象
	push_back("666666"); // 隐式类型转换
}

第一种 — — 创建一个string对象, 传参使用此string对象
第二种 — — 传参用匿名对象
第三种 — — 运用隐式类型转换
其实, 第二种 和 第三种的本质是一样的:

  1. 形参肯定是 string对象, 不过构造出来的临时对象都具有常性
  2. 实参那边要用 常引用const &来接收 — — 这样是权限的平移; 如果是引用& 来接收, 那么就会是权限的放大

⇒ 所以, 我们以后尽量使用类似 第三种的方式, 这样不仅可以简单明了, 也可以省去很多步骤

引用

前面, 我们已经知道了 引用作参数 和 引用做返回值可以减少临时拷贝⇒ 从而达到节省空间, 提高效率的作用

引用作形参

首先, 先看一下对立面

接下来, 看看引用作形参

我们发现, 引用作形参减少了一次拷贝构造 和 析构

引用作返回值

先看一下传值返回(引用作形参)

看一下传引用返回(引用作形参 ⇒ 这种情况就是 引用返回 && 引用作形参)

传值作形参 && 传值返回

编译器优化

编译器会对同一行中的相同功能的事情做一下优化

构造 + 拷贝构造 ⇒ 构造

为了测试 拷贝构造 ⇒ 这里我们就不让引用作形参

当然, 还有一种 构造 + 拷贝构造 ⇒ 优化为构造 的情形 匿名对象返回

拷贝构造 + 拷贝构造 ⇒ 一个拷贝构造

  • 总结:
    匿名对象爽瓜瓜
    尽量使用引用作形参 和 引用作返回值
    如果不能用引用作返回值, 就尽量用编译器的优化⇒ 即尽量写在一行

用手挡住射进眼里的阳光,就像挡住对你的思念,挡不住.

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

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

相关文章

Kotlin 协程中的并发问题:我明明用 mutex 上锁了,为什么没有用?

前言 最近在接手的某项目中&#xff0c;主管给我发来了一个遗留以久的 BUG&#xff0c;让我看看排查一下&#xff0c;把它修复了。 项目的问题大概是在某项业务中&#xff0c;需要向数据库插入数据&#xff0c;而且需要保证同种类型的数据只被插入一次&#xff0c;但是现在却…

day15 - 使用图像金字塔进行图像拼接

在我们之前的学习过程中&#xff0c;使用的都是恒定大小的图像&#xff0c;但是在某些情况下&#xff0c;我们需要使用不同分辨率的&#xff08;相同&#xff09;图像。例如&#xff0c;当在图像中搜索某些东西&#xff08;例如人脸&#xff09;时&#xff0c;我们不确定对象将…

【高级语言程序设计(一)】第 10 章:文件

目录 一、文件概述 &#xff08;1&#xff09;文件定义 &#xff08;2&#xff09;文件命名 &#xff08;3&#xff09;文件分类 ① 按照文件的内容划分 ② 按照文件的组织形式划分 ③ 按照文件的存储形式划分 ④ 按照文件的存储介质划分 &#xff08;4&#xff09;文…

系统集成项目管理工程师 下午 真题 及考点(2019年上半年)

文章目录 一&#xff1a;第10章 项目质量管理&#xff0c;规划质量管理输出&#xff0c;质量成本法&#xff08;一致性成本【预防、评价】 和 非一致性成本【内部失败、外部失败】&#xff09;&#xff0c;七种工具二&#xff1a;第8章 项目进度管理&#xff0c;总浮动时间&…

26 VueComponent 其他属性的更新

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 比如这里看一下 class 的更新 测试用例如下, 增加 topClazz …

4、js - 闭包

1、闭包的概念 闭包&#xff1a;函数嵌套函数&#xff0c;内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析&#xff1a; 需要访问的变量会被放到闭包…

语义分割实战项目(从原理到代码环境配置)

MMsegmentation是一个基于PyTorch的图像分割工具库,它提供了多种分割算法的实现,包括语义分割、实例分割、轮廓分割等。MMsegmentation的目标是提供一个易于使用、高效、灵活且可扩展的平台,以便开发者可以轻松地使用最先进的分割算法进行研究和开发。 看下结果 MMsegmenta…

day13 网络编程Tomcat服务器

c/s架构和b/s架构的区别 c/s架构:客户端软件,直观,体验好,界面美观,安全性高 b/s架构:浏览器–>服务器,可移植性好,开发和维护性好 网络访问的三要素:ip,端口,协议 udp协议和tcp协议的区别 udp协议:只管发送,不管发送到哪里,是否能不能接收,一对多,无连接通信协议 ​ …

《元宇宙之声》:Meta MCDH

为下一代建造未来就绪的校园。 在本期节目中&#xff0c;我们访问了香港路德会马锦明慈善基金马陈端喜纪念中学&#xff08;MCDH&#xff09;的陈婉玲校长&#xff0c;讨论了 MCDH 改革教育的愿景&#xff0c;通过培养年轻的创作者&#xff0c;让他们迈出进入 The Sandbox 的第…

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家介绍一下strcpy函数及其模拟&#xff0c;还有assert&#xff0c;const与凉皮男孩间的爱恨情仇&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️&#xff08;今天的内容和故事非常的有趣&#xff0c;希望大家一键三连…

基于51单片机的两路数字电压表Protues仿真设计

目录 一、设计背景 1.1、数字电压表的发展历程 1.2、课题的意义和目的 二、实现功能 三、仿真演示 四、部分程序展示 一、设计背景 1.1、数字电压表的发展历程 数字电压表简称DVM&#xff0c;它是采用数字化测量技术设计的电压表。从性能来看&#xff1a;数字电压表的发展从…

Go完整即时通讯项目及Go的生态介绍

Go完整即时通讯项目 项目架构&#xff1a; 1 编写基本服务端-Server server.go package mainimport ("fmt""net" )// 定义服务端 type Server struct {ip stringport int }// 创建一个Server func NewServer(ip string, port int) *Server {return …

Vue电商项目--分页器制作

分页器静态组件 分页这个组件&#xff0c;不单单是一个页面用到了。多个页面同时用它,因此我们可以封装成一个全局组件 需要将这个分页结构拆分到components 通用的分页组件Pagination <template><div class"pagination"><button>1</butto…

公司只有1个测试,领导却让我测试10个项目,这不是为难我....

读者提问&#xff1a;公司只有 1个测试&#xff0c;领导让我同时测试 10个项目&#xff0c;我该怎么办&#xff1f;回答&#xff1a;如果我是那个测试&#xff0c;我会做这三件事 1、向上申请资源2、任务分配到人3、执行测试任务 一、向上申请资源 1个测试同时对接 10个项目&a…

python 自动化学习(三) 句柄获取、模拟按键、opencv安装

一、什么是句柄 句柄是在操作系统中的一种标识符&#xff0c;相当于我们每个人的身份证一样&#xff0c;句柄在电脑中也是有唯一性的&#xff0c;我们启动的每一个程序都有自己的句柄号&#xff0c;表示自己的身份 为什么要说句柄&#xff0c;我们如果想做自动化操作时&#xf…

分布式项目 11 在项目中使用jsonp发送请求并且处理

在项目中使用jsonp技术 01.相关子系统的搭建 第一步&#xff1a;创建一个新的子系统&#xff0c;叫做jt-sso 选中jt父级项目&#xff0c;然后鼠标右键进行new&#xff0c;然后选中maven Model&#xff0c;进行项目的创建&#xff0c;具体操 作如下图所示&#xff1a; 第二步…

空气中的声压级、声功率级、声强级的区别

空气中的声压级、声功率级、的区别 在学习声学理论时&#xff0c;经常听到&#xff0c;声压级、声强级、声功率级的名称&#xff0c;经常也听到它们的单位为dB.但是它们是怎样的区别呢&#xff1f;下面介绍这几个名词 一、定义和计算 1.声压级 声压级以 L p {L_p} Lp​表示&am…

解决weekofyear跨年问题

目录 前言跨年问题计算当年第几周前言 前段时间,做了一个日期维度表的需求,发现 计算当年第几周 有误,发现 Hive 中 weekofyear 函数存在跨年问题! 跨年问题 这一周算上一年还是下一年,取决于这一周的大多数日期(4天及以上)在哪一年。算在前一年,就是前一年的最后一…

算法修炼之练气篇——练气十二层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

机械师曙光16电脑开机自动蓝屏怎么解决?

机械师曙光16电脑开机自动蓝屏怎么解决&#xff1f;有的用户在使用机械师曙光16电脑的时候&#xff0c;遇到了一些系统问题&#xff0c;导致自己无法正常的开机使用电脑。因为电脑总会变成蓝屏&#xff0c;无法进行任何操作。那么这个情况怎么去进行问题的解决呢&#xff1f;来…