bool operator==(const T& lhs, const T2& rhs);
像这样的重载似乎只对 (T)a==(T2)b
有效, 但是反过来(T2)b==(T)a
就不行了...
于是好像只有同时双向的进行重载:
bool operator==(const T& lhs, const T2& rhs);
bool operator==(const T2& lhs, const T& rhs) { return rhs == lhs; }
这样了?
正确的重载不同类型之间==操作符的作法是什么?
黄舟2017-04-17 11:49:25
有两个地方可能不太妥当。一个是不同的类之间重载==运算符,有违惯例。另一个是定义为全局方法,破坏了封装性。
一般来说T和T2应该有一个共同的父类S,在S里重载==运算符
class S
{
// ...
bool operator ==(const S& s);
// ...
};
怪我咯2017-04-17 11:49:25
既然类型不同,那还有什么比较的意义?
如果真要比较,那么应该先进行类型转换。
重载 ==
操作符有两种实现方式,一种在类内部,参数一个就够了;如果在外部实现,就使用两个参数的版本。