3

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

有什么建议吗?

4

3 回答 3

11

你不能。C++ 运算符重载必须至少涉及一种用户定义类型。

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

于 2013-05-28T15:35:53.213 回答
1

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

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

于 2013-05-28T15:48:47.303 回答
0

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

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

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

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

希望这可以帮助。

于 2013-05-28T15:46:32.040 回答