Глобальная перегрузка == и! = Для чисел с плавающей запятой

Это плохая практика перегружать глобальный оператор == а также != для плавающих точек? Я использую быстрые числа с плавающей запятой в игровой среде, и я думал об использовании нечеткого сравнения везде, поскольку я не могу представить ситуацию, когда я не ожидаю, что чрезвычайно близкие числа не будут равны.

Любой совет ?

3

Решение

Другие посты упоминали технические проблемы с другой точки зрения:

Это плохая практика, потому что никто не ожидает, что эти операторы будут перегружены, в то время как разумные люди будут ожидать almostEquals функция. Это странно и странно и маскирует то, что на самом деле происходит.

1

Другие решения

Ты не можешь Перегрузки операторов C ++ должны включать хотя бы один пользовательский тип.

И даже если бы вы могли, это, вероятно, было бы плохой идеей. Пользователи ожидают, что равенство будет переходный, т.е. если a == b а также b == c, затем a == c, Похоже, ваше нечеткое сравнение не будет переходным.

11

Проблема в том, что если бы вы могли это сделать, и в коде вы увидели что-то вроде:

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

Знаете ли вы, если это вызывает регулярное сравнение или, скажем, fuzzyCompare() функционировать? Для того, чтобы различать и то и другое, вам нужно посмотреть в коде, что такое тип a и b … Вы не сможете прочитать свой собственный код, не задавая себе много вопросов, и, вероятно, перекрестно ссылки на множество переменных с их типами.

Это именно тот сценарий, в котором перегрузка оператора становится кошмаром, и причина его злоупотребления привела к тому, что его отбросили для таких языков, как Java.

Надеюсь это поможет.

0
По вопросам рекламы [email protected]