c++重载==操作符

发布于 2022-09-01 05:44:55 字数 382 浏览 13 评论 0

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; }

这样了?
正确的重载不同类型之间==操作符的作法是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无妨# 2022-09-08 05:44:55

正确的做法是不要重载不同的自定义类型之间的==操作符。这么做除了把读代码的人弄晕外没有一点好处。

对岸观火 2022-09-08 05:44:55

有两个地方可能不太妥当。一个是不同的类之间重载==运算符,有违惯例。另一个是定义为全局方法,破坏了封装性。
一般来说T和T2应该有一个共同的父类S,在S里重载==运算符

class S
{
    // ...
    bool operator ==(const S& s);
    // ...
};
小…楫夜泊 2022-09-08 05:44:55

既然类型不同,那还有什么比较的意义?
如果真要比较,那么应该先进行类型转换。

重载 == 操作符有两种实现方式,一种在类内部,参数一个就够了;如果在外部实现,就使用两个参数的版本。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文