关闭

More Effective C++之21

906人阅读 评论(0) 收藏 举报
条款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);这违反了重载的规则。重载函数的弊端是容易混淆,增加了二义性出现的几率,所以如何权衡还需要看实际的情况。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:612908次
    • 积分:9793
    • 等级:
    • 排名:第1786名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论