More Effective C++之21

原创 2006年06月16日 09:22:00
条款21:利用重载技术(overload)避免隐式型别转换(implicit type conversions)
class Rational
{
……

const Rational operator+(const Rational& lhs, const Rational rhs);

……
}

如果我们这么写:
Rational a(10);

Rational b(10,11);

Rational c = a + b;

这样当然是最理想的结果了,没有什么额外的成本,但事实往往并非如此,例如,Rational c = a + 10; C++当然很乐意将10转化成Rational对象,然而这意味的是成本的增加。所以,我们可以使用重载技术。

const Rational operator+(const Rational& lhs, const Rational& rhs);

const Rational operator+(int lhs, const Rational& rhs);

const Rational operator+(const Rational& lhs, int rhs);

当然我们做不到const Rational operator+(int lhs, int rhs);这违反了重载的规则。重载函数的弊端是容易混淆,增加了二义性出现的几率,所以如何权衡还需要看实际的情况。

相关文章推荐

More Effective C++之Item M21:通过重载避免隐式类型转换

C++规则:每一个重载的operator必须带有一个用户定义类型(user-defined type)的参数; 以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UP...

More Effective C++----(21)通过重载避免隐式类型转换

Item M21:通过重载避免隐式类型转换 (读这一节内容之前,建议回顾C++转换构造函数和隐式转换函数的相关知识。) 以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: c...

利用重载避免隐式类型转换(More Effective C++_21(效率))

class UPInt { // unlimited precision  public: // integers 类  UPInt();  UPInt(int value);  ... };//有关...

指针和引用的区别(More Effective c++ )

指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ” ),但 是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候 使用指针,在什么时候使用...

《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?

昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分...
  • hxz_qlh
  • hxz_qlh
  • 2013年10月26日 21:27
  • 5925

More Effective C++:Item 27

温习More Effective C++,对于Item 27:要求或禁止在堆中产生对象,整理思路于此文。编译期控制通过禁用编译器产生对象所需的选项即可在编译期阻止对象被定义。产生堆对象所需的选项: ...

More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化

技巧 本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿...

More Effective C++议题【一】:指针和引用

> 学习笔记【一】 这个议题作为第一个建议出现在了 More effective ++中, 在一开始,第一件事就是提醒了我们关于指向空值的引用. 即如下代码出现的可能性: char *pc = 0; ...

More Effective C++----(10)在构造函数中防止资源泄漏

Item M10:在构造函数中防止资源泄漏 如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音...

More Effective C++笔记

(之前Mindjet笔记的截图) 更多:(http://blog.csdn.net/u011512437/article/details/48879543 “Effective C++笔记”)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:More Effective C++之21
举报原因:
原因补充:

(最多只允许输入30个字)