效率: 条款21 利用重载技术避免隐式类型转换(implicit type conversions)
2016-02-28 19:52
459 查看
理解本条款内容之前需要先看一个例子:
结论:使用函数重载来避免隐式类型转换所产生的临时对象,从而提高程序运行效率不仅仅局限运用在操作符函数身上。在大部分程序中,如果可以接受一个char*,你可能会希望也接受一个string对象。
class UPint { public: UPint(); UPint(int value); .... } const UPint operator+(const UPint& lhs,const UPint& rhs); UPint u1,u2; UPint u3 = u1 + u2;//这没什么可讨论的,可以执行。 UPint u4 = 10+u2; UPint u4 = u2+10;
以上例子也可以成功,它们之所以成功在于该语句产生了临时对象,并将整数10转换为UPint。由编译器来执行此类隐式转换,很方便,但是此类转换会产生临时对象,从而产生我们不想要的运行成本。我们并不想进行隐式类型转换,我们想要的结果仅仅是为了能够使一个UPint类型与一个int类型能够进行operator+类型重载而已。如果我们想要能够对UPint和int进行加法,我们需要做的就是多声明几个重载函数,每个函数拥有不能的参数。如下列所示:
const UPint operator+(const UPint& lhs,const UPint& rhs); const UPint operator+(cosnt UPint& lhs,int rhs); const UPint operator+(int lhs,const UPint& rhs);
结论:使用函数重载来避免隐式类型转换所产生的临时对象,从而提高程序运行效率不仅仅局限运用在操作符函数身上。在大部分程序中,如果可以接受一个char*,你可能会希望也接受一个string对象。
相关文章推荐
- 1.NSNotification|远程通知|本地通知|激光推送
- SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 3)
- ssh整和hibernate时出现错误(一)
- ssh整和hibernate时出现错误(二)
- AndroidStudio-------IdeaVim插件
- app登陆以及与后台通讯安全性
- Java中文件File类的基本方法使用演示
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xb7 in position 7: ordinal not in range(128)
- OA学习笔记-006-SPRING2.5与hibernate3.5整合
- memset in C++ and C
- iphone6 字体模糊解决办法
- 计算机网络20--Socket编程
- UITextField 限制输入字数
- 传输层中的协议 TCP & UDP
- 正则表达式中 ? 符号的一些用法
- stanford-NLP-CLASS1课堂笔记
- 大数据应用与医学检验平台结合(论文)
- How browsers work<一>介绍
- UIView
- Loadrunner重要概念——集合点