浮点数的==和!=的全局重载

Global overloading of == and != for floating-points

本文关键字:重载 全局 浮点数      更新时间:2023-10-16

为浮点重载全局操作符==!=是一种不好的做法吗?我在游戏环境中使用快速浮点数,我正在考虑在任何地方使用模糊比较,因为我无法想象我不期望非常接近的数字不相等的情况。

有什么建议吗

你不能。c++操作符重载必须至少包含一个用户定义的类型。

即使你可以,这也可能是个坏主意。用户期望相等是可传递的,即如果a == bb == c,则a == c。听起来你的模糊比较是不可传递的。

其他帖子提到了技术问题,从另一个角度来看:

这是一个不好的做法,因为没有人期望这些操作符被重载,而合理的人会期望almostEquals函数。这很奇怪,很奇怪,掩盖了真正发生的事情。

问题是:如果你真的可以这样做,在代码中你看到这样的东西:

if ( a == b ) {
    // more things...
}

您知道它是在调用常规比较还是fuzzyCompare()函数吗?为了区分两者,您必须在代码中查找a和b的类型……如果不问自己很多问题,你就无法阅读自己的代码,并且可能会交叉引用许多变量及其类型。

这正是操作符重载成为一场噩梦的场景,它的滥用导致它在Java等语言中被放弃。