调用operator+=来定义operator+比其他方法更有效?
如题,下面给出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+比其他方法更有效?相关推荐
- python operator __gt___Python operator.gt方法代码示例
本文整理汇总了Python中operator.gt方法的典型用法代码示例.如果您正苦于以下问题:Python operator.gt方法的具体用法?Python operator.gt怎么用?Pyth ...
- 课时 24:Kubernetes API 编程利器:Operator 和 Operator Framework(夙兴)
本节课程主要分享以下三方面的内容: operator 概述 operator framework 实战 工作流程 operator 概述 基本概念 首先介绍一下本节所涉及到的基本概念. CRD (Cu ...
- C++ new/new operator、operator new、placement new初识
简要释义 1.operator new是内存分配函数(同malloc),C++在全局作用域(global scope)内提供了3份默认的operator new实现,并且用户可以重载operator ...
- C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)
八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...
- 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...
本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...
- 如何调用AngularJS指令中定义的方法?
本文翻译自:How to call a method defined in an AngularJS directive? I have a directive, here is the code : ...
- operator.ne_Python operator.ne()函数与示例
operator.ne operator.ne()函数 (operator.ne() Function) operator.ne() function is a library function of ...
- spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍
Bean的基本属性 id属性: Bean的唯一标识名.它必须是合法的XML ID,在配置文件中,不能有重复id的Bean,因为容器在获取Bean的实例时都用它来做唯一索引. name属性: 用来为id ...
- java扫描接口_一种扫描接口并生成可调用API接口文档的方法与流程
本发明属于JavaWeb开发技术领域,涉及一种API接口文档的生成方法,尤其是一种扫描接口并生成可调用API接口文档的方法. 背景技术: API(Application Programming Int ...
- go 调用c 编译器找不到方法_深度解密Go语言之关于 interface 的10个问题
这次文章依然很长,基本上涵盖了 interface 的方方面面,有例子,有源码分析,有汇编分析,前前后后写了 20 多天.洋洋洒洒,长篇大论,依然有些东西没有涉及到,比如文章里没有写到反射,当然,后面 ...
最新文章
- 模板方法设计模式与策略模式
- win7 cmd执行vue不是内部命令解决办法
- 使用 SetCustomizedString汉化UltraWinGrid的筛选
- 【C++】Visual Studio教程(十) - 初步了解 Visual Studio IDE
- win32汇编指令汇总
- 3说明书_知行翻译:做化妆品说明书翻译时,这3点需要谨记
- MySQL自动建立集合自动分片_1.mongodb初步使用总结
- java quartz mybatisplus_Springboot+redis+SpringMVC+Mybatis Plus分布式开发系统源码
- 美国AI公司30亿人脸数据被黑,遭科技巨头联合“封杀”
- [概念学习] Virtualization的几个概念
- 微信打飞机java代码
- JAVAweb之SSH框架
- 【洛谷 P5244】 [USACO19FEB]Mowing Mischief P(分治 / 决策单调性优化DP)
- matplotlib绘制正弦曲线
- CF1442D Sum 分治 背包dp
- 【华为云技术分享】云图说 | 初识华为云存储容灾服务:为您的云上数据保驾护航
- 使用wildfly部署项目
- python入门技能树评测-积跬步以至千里
- 2021年宁波市建筑物轮廓及高度矢量数据
- 自动化运维工具——【ansible】——从菜鸟到菜鸟
热门文章
- handler回调主线程_Handler源码和9个常见问题的解答,这些你都掌握了吗?
- shell脚本合并文件内容
- adb pull 报错处理:adb: error: cannot create file/directory 'E:\': No such file or directory
- IO流之流的操作规律
- BZOJ 4178 A
- linux命令(47):Linux下对文件进行按行排序,去除重复行
- 浏览器控件JxBrowser V6.14大版本发布 | 注入CSS
- PHP数字格式化,每三位逗号分隔数字,可以保留小数
- 重庆Uber优步司机奖励政策
- 中继联通chinaunicom热点。求路由推荐。-无线路由器-中国无线论坛 -