==
重载全局运算符和!=
浮点数是不好的做法吗?我在游戏环境中使用快速浮点数,我正在考虑在任何地方使用模糊比较,因为我无法想象我不期望非常接近的数字不相等的情况。
有什么建议吗?
==
重载全局运算符和!=
浮点数是不好的做法吗?我在游戏环境中使用快速浮点数,我正在考虑在任何地方使用模糊比较,因为我无法想象我不期望非常接近的数字不相等的情况。
有什么建议吗?
你不能。C++ 运算符重载必须至少涉及一种用户定义类型。
即使可以,这也可能是个坏主意。用户期望相等是可传递的,即 ifa == b
和b == c
, then a == c
。听起来您的模糊比较不会传递。
其他帖子提到了技术问题,从另一个角度:
这是一个不好的做法,因为没有人期望这些运算符被重载,而理性的人会期望一个almostEquals
函数。它奇怪而奇怪,掩盖了真正发生的事情。
问题是:如果你真的可以这样做,并且在代码中你看到了类似的东西:
if ( a == b ) {
// more things...
}
你知道它是调用常规比较还是调用fuzzyCompare()
函数?为了区分两者,您必须在代码中查找 a 和 b 的类型......如果不问自己很多问题,您将无法阅读自己的代码,并且可能会交叉-引用许多变量及其类型。
这正是运算符重载成为一场噩梦的场景,也是它被滥用导致它在 Java 等语言中被放弃的原因。
希望这可以帮助。