浮点数的==和!=的全局重载
Global overloading of == and != for floating-points
为浮点重载全局操作符==
和!=
是一种不好的做法吗?我在游戏环境中使用快速浮点数,我正在考虑在任何地方使用模糊比较,因为我无法想象我不期望非常接近的数字不相等的情况。
有什么建议吗
你不能。c++操作符重载必须至少包含一个用户定义的类型。
即使你可以,这也可能是个坏主意。用户期望相等是可传递的,即如果a == b
和b == c
,则a == c
。听起来你的模糊比较是不可传递的。
其他帖子提到了技术问题,从另一个角度来看:
这是一个不好的做法,因为没有人期望这些操作符被重载,而合理的人会期望almostEquals
函数。这很奇怪,很奇怪,掩盖了真正发生的事情。
问题是:如果你真的可以这样做,在代码中你看到这样的东西:
if ( a == b ) {
// more things...
}
您知道它是在调用常规比较还是fuzzyCompare()
函数吗?为了区分两者,您必须在代码中查找a和b的类型……如果不问自己很多问题,你就无法阅读自己的代码,并且可能会交叉引用许多变量及其类型。
这正是操作符重载成为一场噩梦的场景,它的滥用导致它在Java等语言中被放弃。
相关文章:
- 重载运算符 new/new[] 删除/删除[] 全局C++
- 在全局命名空间中重载不依赖于用户定义类型的标准定义类型的运算符是否格式正确?
- 重载全局运算符新(非 POD)
- 全局删除的冲突重载
- 运算符重载:简单添加...错误 C2677:二进制"+":未找到采用类型 ___ 的全局运算符(或者不存在可接受的转换)
- 全局新运算符重载
- 为什么使用范围解析运算符会更改调用全局命名空间中的哪个重载模板?
- 如何为模板类的所有实例专用化或重载全局模板函数
- 误解全局运算符重载规则
- 在重载的全局new操作符中使用静态对象会导致核心转储运行时错误
- 为什么成员函数的重载解析排除全局函数
- 每个类重载new(),而不是全局重载
- 如果存在具有不同参数类型的重载,则在全局命名空间中找不到函数
- 全局重载 delete[] 未在第三方库中调用
- 如何重载全局new操作符
- 浮点数的==和!=的全局重载
- 在c++类中重载全局函数getline
- iostream插入器和提取器可以是类成员而不是全局重载吗?
- 在全局范围内重载std容器上的操作符是不好的风格吗?
- 在c++中重载全局new()调用之前未初始化全局静态变量