首页 > 编程语言 >C++对象优化4条原则

C++对象优化4条原则

时间:2024-10-31 20:20:27浏览次数:3  
标签:10 调用 对象 C++ 生成 临时 优化 构造函数

1、函数参数传递优先使用传引用,而不是传值

①、函数参数传递的过程是赋值的过程,对象之间赋值是会产生赋值运算符的重载调用,退出函数时还会再调用一次析构函数,传引用就不存在上述函数调用

2、函数返回一个临时对象时,应该直接返回,而不应该先定义一个临时对象,然后返回定义的临时对象;

①、定义一个临时对象会产生构造函数,函数返回临时对象会在主调函数栈空间生成一个临时对象,这个时候会调用拷贝构造函数,接下来就会析构第一个临时对象,一大堆函数调用
②、直接返回临时对象,相当于用一个临时对象生成另外一个临时对象A a = A(10);编译器直接优化成,只生成临时对象a , 假如不优化:1、先调用构造函数生成临时对象A(10),然后调用拷贝构造函数生成 A a,最后出了该语句调用析构函数析构A(10) , 这样会有三个函数调用过程,效率极其低下,编译器直接优化成:按照生成临时对象A(10)的方式直接构造生成Aa;这样只有一个函数调用过程

3、接收函数返回值的时候优先使用初始化的方式进行接收,而不是采用赋值的方式

①、假如返回值是个临时变量,采用赋值的方式,首先主调函数内必须先生成一个对象用来接收返回值,此时调用一次构造函数,接收返回值采用赋值,又调用了赋值运算符的重载,赋值完成后临时对象还要析构,到此调用了三次函数。
②、假如采用初始化的方式:那就相当于用临时变量生成一个新对象,注意一旦遇到这种场景,编译器就会进行优化,如下:用生成临时对象的方法构造生成新对象,整个过程只有一次构造函数调用过程,效率大大提高

4、用临时对象生成一个新对象,直接按照生成临时对象方法生成新对象

A a = A(10);正常情况下函数调用如下:
1、构造临时对象 A(10)
2、调用拷贝构造函数生成A a
3、出函数语句 析构 A(10)
完成,以上总共调用了三次函数,消耗巨大,优化之后只有一次:
按照生成A(10)的方式调用构造函数生成A a , 只有一次函数调用 相当于 A a(10);

标签:10,调用,对象,C++,生成,临时,优化,构造函数
From: https://blog.csdn.net/doubleintfloat/article/details/143415941

相关文章

  • JAVA面向对象编程(详细 全部)
    概念面向对象编程(Object-orientedProgramming,OOP)是一种广泛应用于软件开发的编程范式。它通过将数据和对数据操作的方法封装在一个独立的实体中,即对象,来组织和管理代码。面向对象编程强调在编程过程中模拟真实世界中的实体和其相互关系。定义类我们需要搞清楚几件事情:对象......
  • U6面向对象设计
    Unit6面向对象设计这是编程思想的差别,相比与C语言的面向对象设计,大概就是由各种功能的方法组成项目,比较具体,缺少抽象,对于类似的操作不能很好的复用。在语言语法上多了类Class,继承,多态这些。6.1类'''Python类/对象Python是一种面向对象的编程语言。Python中的几乎所有东......
  • 第九周:对象式编程
    第九周:对象式编程1.万物皆对象对象是一种相对独立的存在,类是描述某一类对象的统称,对象是类的实例类由属性和方法来描述,对应变量和函数类={属性}+{方法}如果类是<C>,其派生的对象是<O>,属性是<A>,方法是<B>,那么访问方法结构如下:属性访问:<O>.<A>方法访问:<O>.<B>()......
  • [SCOI2014] 方伯伯的玉米田(树状数组优化 DP)
     loj传送门https://loj.ac/p/2211洛谷题目传送门https://www.luogu.com.cn/problem/P3287解题思路首先,我们可以贪心地思考一下:对于每一次区间的加一操作,右端点是在末尾会比右端点在中间的情况更好。因为,当你的右端点在序列中间的时候,相对之下,后面的数就更小了一些,这样是......
  • C++笔记---可变参数模板
    1.简单介绍与基本语法可变参数模板是指模板的类型参数列表的的参数个数可变。C++11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包:表示零或多个模板参数。函数参数包:表示零或多个函数参数。参数包的......
  • 深入计算机语言之C++:内存管理
    ......
  • Python——石头剪刀布(附源码+多模式二改优化版)
    编程初学者通常会从简单的项目开始,以建立基础并增强信心。石头剪刀布游戏是一个很好的起点,因为它涉及到基本的逻辑判断、用户输入处理和随机数生成。本文将详细介绍如何使用Python编写一个石头剪刀布游戏,并提供完整的代码和解释。目录一、游戏介绍二、基本代码解析与实现......
  • C++三五法则
     若类中有资源在构造函数中创建,并在析构函数中释放,此时需要显式定义拷贝构造、赋值,析构等操作,若在程序没有显示声明并定义时,会被隐式生成,对于不包含联合体的类,隐式生成的拷贝构造函数和赋值运算在执行时,会按成员对象依次复制,隐式生成的析构函数为空如下面的类T管理资源int*clas......
  • 决策单调性优化 DP
    前言本文将介绍决策单调性优化DP的相关内容。持续更新修正,如有差错请指出。1.四边形不等式优化1.1四边形不等式与决策单调性四边形不等式:如果对于任意的\(a\leb\lec\led\)均成立\[w(a,d)+w(b,c)\gew(a,c)+w(b,d)\]则称代价函数\(w\)满足四边形不等式。......
  • C++泛型一:模板
    数据类型给程序设计带来的困扰及解决方案intmaxt(int,int);doublemaxt(double,double);若有一种占位符T,能够代替类型,便可以简化代码的冗余编写Tmaxt(T,T);C++模板模板声明如下template<typenameT1,...>template是C++的模板声明关键字,尖括号内为模板参数列表typ......