Это плохая практика перегружать глобальный оператор ==
а также !=
для плавающих точек? Я использую быстрые числа с плавающей запятой в игровой среде, и я думал об использовании нечеткого сравнения везде, поскольку я не могу представить ситуацию, когда я не ожидаю, что чрезвычайно близкие числа не будут равны.
Любой совет ?
Другие посты упоминали технические проблемы с другой точки зрения:
Это плохая практика, потому что никто не ожидает, что эти операторы будут перегружены, в то время как разумные люди будут ожидать almostEquals
функция. Это странно и странно и маскирует то, что на самом деле происходит.
Ты не можешь Перегрузки операторов C ++ должны включать хотя бы один пользовательский тип.
И даже если бы вы могли, это, вероятно, было бы плохой идеей. Пользователи ожидают, что равенство будет переходный, т.е. если a == b
а также b == c
, затем a == c
, Похоже, ваше нечеткое сравнение не будет переходным.
Проблема в том, что если бы вы могли это сделать, и в коде вы увидели что-то вроде:
if ( a == b ) {
// more things...
}
Знаете ли вы, если это вызывает регулярное сравнение или, скажем, fuzzyCompare()
функционировать? Для того, чтобы различать и то и другое, вам нужно посмотреть в коде, что такое тип a и b … Вы не сможете прочитать свой собственный код, не задавая себе много вопросов, и, вероятно, перекрестно ссылки на множество переменных с их типами.
Это именно тот сценарий, в котором перегрузка оператора становится кошмаром, и причина его злоупотребления привела к тому, что его отбросили для таких языков, как Java.
Надеюсь это поможет.