当前位置: 首页 > article >正文

C++对象优化4条原则

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);


http://www.kler.cn/a/378926.html

相关文章:

  • CloudCompare——基于连通性的点云分类【2024最新版】
  • Windows换机华为擎云(银河麒麟V10+麒麟9000C CPU)后,使用selenium的程序怎么办(20241030)
  • 【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
  • 【操作系统】每日 3 题(五)
  • 移植 AWTK 到 纯血鸿蒙(HarmonyOS NEXT)系统 (0) - 序
  • Linux 下执行定时任务之 Systemd Timers
  • 【hacker送书第14期】AI训练师算法与模型训练从入门到精通
  • SpringMvc参数传递
  • js实现blob类型转化为excel文件
  • AI大模型时代,程序员如何保持竞争力
  • 西门子触摸屏维修6AV7200-1JA11-0AA0防爆显示屏维修
  • 【SQL Server】华中农业大学空间数据库实验报告 实验一 数据库
  • 亚马逊国际商品详情API:揭秘电商界的“X档案”
  • Django框架实现用户认证
  • 安卓逆向之过frida检测总结版
  • VR游戏:多人社交将是VR的下一个风口
  • SpringMvc请求
  • Spring Boot Admin应用
  • 照明灯十大知名品牌有哪些?2024灯具十大公认品牌排行榜出炉!
  • 洛阳建筑设计资质电子化申报操作流程
  • 怎麼解除IP阻止和封禁?
  • 2-139 基于matlab的弹道轨迹仿真
  • 低压补偿控制器维修措施
  • ES6中数组新增了哪些扩展?
  • Java项目实战II基于Spring Boot的智能家居系统(开发文档+数据库+源码)
  • 【jvm】为什么Xms和Xmx的值通常设置为相同的?