个人视野和经验
我个人并不在不同类型之间的比较皱眉。我甚至鼓励它,因为它可以提高代码的可读性;让你在做什么看起来更合乎逻辑。除了基本的数字类型,也可能是一个字符串和一个字符,我发现很难给出一个合乎逻辑的类型内比较,而且我不记得遇到过很多。我遇到了很多像这样使用的算术运算符。
如何使用它们
你应该小心你在做什么,他们很少使用的一个原因。如果您提供了两种不同类型的比较函数,则结果应该合乎逻辑,用户直观地预期了结果。也希望为它编写好的文档。 Mark Ransom已经说过了,但如果用户可以在两个方向上进行比较,那就很好。如果你认为你的比较不够清楚,你应该考虑使用命名函数。如果您的运营商可以有多种含义,这也是一个非常好的解决方案。
可能出现的错误
您不必在什么用户将与你所写的内容做的完全控制。 Tletnes举了一个很好的例子,比较两个整数,但结果没有意义。与此相反,两种不同类型的比较可能是非常正确的。浮点数和整数都代表秒,可以很好地比较。
算术运算符
下一步逻辑,我想显示与算术运算符帧内类型的例子。算术运算符在讨论类型内用法时很像逻辑运算符。
假设你有一个运算符+一个二维向量和一个正方形。这是做什么的?用户可能认为它会缩放广场,但另一个用户确信它会翻译!这些问题可能会让用户感到非常沮丧。你可以通过提供很好的文档来解决这个问题,但是我个人更喜欢的是专门命名的函数,比如Translate。
结论
内型逻辑运算符可以是有益的,使干净的代码,但坏的使用使得一切都只是更加复杂。
取决于谁将维护代码:)我倾向于将它实现为类方法,即BarType :: CompareToEpoch。顺便说一句,长整型会比秒以来测量秒数要好一倍... – Alex1985
我认为这个被搁置的原因将是你的答案。 – ChiefTwoPencils
我会说是的,因为'operator ==(const FooType&)'应该可能是'BarType'类的方法,而不是函数。 – chepner