21利用重载技术(overload)避免隐式类型转换:
原因:
- 隐式类型转换产生临时对象带来一些我们并不想要的成本
例如:
class Obj
{
public:
Obj(){}
Obj(int val){}
}
const Obj operator+(const Obj & lhs, const Obj & rhs);
Obj obj1, obj2;
Obj obj3 = obj1 + 10; // 这里之所以不报错时因为10通过隐式转换成Obj类型的对象
上述隐式转换的前提是class中有相关有参构造函数
优化:
声明数个函数,考虑各种情况的参数类型,每个函数有不同类型的参数表,来消除隐式类型转换的需求
const Obj operator+(const Obj & lhs, int rhs);
const Obj operator+(int lhs, const Obj & rhs);
Obj obj3 = obj1 + 10; // 不会产生临时对象
Obj obj3 = 10 + obj1; // 不会产生临时对象
总结:
根据80-20法则,增加一大堆重载函数不见得是件好事,除非使用重载函数后,程序的整体效率有重大改善
Comments NOTHING