如题,下面给出operator+=和operator+的实现

 1 Sales_data&
 2 Sales_data::operator+=(const Sales_data &rhs)
 3 {
 4     units_sold += rhs.units_sold;
 5     revenue += rhs.revenue;
 6     return *this;
 7 }
 8
 9 Sales_data
10 operator+(const Sales_data &lhs, const Sales_data &rhs)
11 {
12     Sales_data sum = lhs;13     sum += rhs;
14     return sum;
15 }

上面的代码是用调用operator+来定义operator+=的。

首先operator+有两个参数,其参数类型为const,是不需要改变的,其返回类型为Sales_data类型的一个拷贝。不过每次都需要在函数体内定义一个临时变量,用来返回拷贝。

而operator+=有一个参数,其参数类型为const,不需要改变,其返回类型为Sales_data类型的引用。每次不需要在函数内创建临时变量,直接可返回*this。

如果用operator+来定义operator+=的话,则不论调用operator+还是operator+=,每次都会创建一个Sales_data的临时变量。

以下为调用operator+来定义operator+=的代码:

 1 Sales_data& Sales_data::operator+=(const Sales_data &rhs)
 2 {
 3     Sales_data old_data = *this;
 4     *this = old_data + rhs;
 5     return *this;
 6 }
 7
 8 Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs)
 9 {
10     Sales_data sum;
11     sum.units_sold = lhs.units_sold + rhs.units_sold;
12     sum.revenue = lhs.revenue + rhs.revenue;
13     return sum;
14 }

所以说调用operstor+=来定义operator+是更有效率的。

你也会觉得这个问题对你有帮助:

http://stackoverflow.com/questions/21071167/why-is-it-more-efficient-to-define-operator-to-call-operator-rather-than-the

转载于:https://www.cnblogs.com/clairvoyant/p/5371494.html

调用operator+=来定义operator+比其他方法更有效?相关推荐

  1. python operator __gt___Python operator.gt方法代码示例

    本文整理汇总了Python中operator.gt方法的典型用法代码示例.如果您正苦于以下问题:Python operator.gt方法的具体用法?Python operator.gt怎么用?Pyth ...

  2. 课时 24:Kubernetes API 编程利器:Operator 和 Operator Framework(夙兴)

    本节课程主要分享以下三方面的内容: operator 概述 operator framework 实战 工作流程 operator 概述 基本概念 首先介绍一下本节所涉及到的基本概念. CRD (Cu ...

  3. C++ new/new operator、operator new、placement new初识

    简要释义 1.operator new是内存分配函数(同malloc),C++在全局作用域(global scope)内提供了3份默认的operator new实现,并且用户可以重载operator ...

  4. C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)

    八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...

  5. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

  6. 如何调用AngularJS指令中定义的方法?

    本文翻译自:How to call a method defined in an AngularJS directive? I have a directive, here is the code : ...

  7. operator.ne_Python operator.ne()函数与示例

    operator.ne operator.ne()函数 (operator.ne() Function) operator.ne() function is a library function of ...

  8. spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍

    Bean的基本属性 id属性: Bean的唯一标识名.它必须是合法的XML ID,在配置文件中,不能有重复id的Bean,因为容器在获取Bean的实例时都用它来做唯一索引. name属性: 用来为id ...

  9. java扫描接口_一种扫描接口并生成可调用API接口文档的方法与流程

    本发明属于JavaWeb开发技术领域,涉及一种API接口文档的生成方法,尤其是一种扫描接口并生成可调用API接口文档的方法. 背景技术: API(Application Programming Int ...

  10. go 调用c 编译器找不到方法_深度解密Go语言之关于 interface 的10个问题

    这次文章依然很长,基本上涵盖了 interface 的方方面面,有例子,有源码分析,有汇编分析,前前后后写了 20 多天.洋洋洒洒,长篇大论,依然有些东西没有涉及到,比如文章里没有写到反射,当然,后面 ...

最新文章

  1. 模板方法设计模式与策略模式
  2. win7 cmd执行vue不是内部命令解决办法
  3. 使用 SetCustomizedString汉化UltraWinGrid的筛选
  4. 【C++】Visual Studio教程(十) - 初步了解 Visual Studio IDE
  5. win32汇编指令汇总
  6. 3说明书_知行翻译:做化妆品说明书翻译时,这3点需要谨记
  7. MySQL自动建立集合自动分片_1.mongodb初步使用总结
  8. java quartz mybatisplus_Springboot+redis+SpringMVC+Mybatis Plus分布式开发系统源码
  9. 美国AI公司30亿人脸数据被黑,遭科技巨头联合“封杀”
  10. [概念学习] Virtualization的几个概念
  11. 微信打飞机java代码
  12. JAVAweb之SSH框架
  13. 【洛谷 P5244】 [USACO19FEB]Mowing Mischief P(分治 / 决策单调性优化DP)
  14. matplotlib绘制正弦曲线
  15. CF1442D Sum 分治 背包dp
  16. 【华为云技术分享】云图说 | 初识华为云存储容灾服务:为您的云上数据保驾护航
  17. 使用wildfly部署项目
  18. python入门技能树评测-积跬步以至千里
  19. 2021年宁波市建筑物轮廓及高度矢量数据
  20. 自动化运维工具——【ansible】——从菜鸟到菜鸟

热门文章

  1. handler回调主线程_Handler源码和9个常见问题的解答,这些你都掌握了吗?
  2. shell脚本合并文件内容
  3. adb pull 报错处理:adb: error: cannot create file/directory 'E:\': No such file or directory
  4. IO流之流的操作规律
  5. BZOJ 4178 A
  6. linux命令(47):Linux下对文件进行按行排序,去除重复行
  7. 浏览器控件JxBrowser V6.14大版本发布 | 注入CSS
  8. PHP数字格式化,每三位逗号分隔数字,可以保留小数
  9. 重庆Uber优步司机奖励政策
  10. 中继联通chinaunicom热点。求路由推荐。-无线路由器-中国无线论坛 -