More Effective C++之21
2006-06-16 09:22
267 查看
条款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);这违反了重载的规则。重载函数的弊端是容易混淆,增加了二义性出现的几率,所以如何权衡还需要看实际的情况。
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++----(21)通过重载避免隐式类型转换
- More Effective C++ (条款21:利用重载技术避免隐式类型转换)
- 利用重载避免隐式类型转换(More Effective C++_21(效率))
- More Effective C++ 条款21
- 《MORE EFFECTIVE C++》条款20 条款21
- 读书笔记MoreEffectiveC++(21)
- More Effective C++ 条款21 利用重载技术避免隐式类型转换
- More Effective C++:通过引用捕获异常(转)
- More Effective C++之5
- More Effective C++之10
- More Effective C++之18
- More Effective C++之25
- More Effective C++之26
- More Effective C++:指针与引用的区别
- More Effective C++之35
- More Effective C++ 条款14 明智运用exception specifications
- more effective c++ 第一章读书笔记: 指针,引用,c++类型转换,多态数组,默认构造函数
- throw()使用小结:More effective C++:审慎使用异常规格(转),简单举例
- <More Effective C++>笔记--运算符
- More Effective C++:理解new和delete