Это плохая практика в общем случае.
Причины:
- Неожиданное поведение: Перегруженные
&& и || теряют свойство ленивых вычислений (short-circuit evaluation). Оба операнда будут вычислены всегда, что может привести кSide effects и падению производительности.
- Потеря интуитивности: Пользователи ожидают стандартного поведения булевых операторов. Перегрузка делает код менее читаемым и предсказуемым.
- Сложности с отладкой: Нестандартное поведение операторов затрудняет поиск ошибок.
Исключения (редкие случаи):
- Типы, представляющие логические выражения: Например, в библиотеках для работы с символьными вычислениями или логическими схемами. В этом случае перегрузка может быть оправдана для построения выражений.
- Доменно-специфичные языки (DSL): Иногда перегрузка используется для создания более выразительного синтаксиса в узкоспециализированных областях.
Даже в этих редких случаях следует тщательно документировать такое поведение и рассмотреть альтернативы (например, использование именованных функций вместо операторов).
Гораздо предпочтительнее использовать именованные функции для выполнения операций, которые не соответствуют стандартной логике булевых операторов.
c