Перегрузка оператора сравнения, почему не работает компилятор?

Сегодня я реализовал тип данных, в котором я решил перегрузить операторы сравнения. При этом вопрос возник в моей голове.

Почему я, как программист, должен определять каждый оператор сравнения, когда все, что я делаю, это определяю их в терминах '<' (увидеть ниже)? — То есть, почему компилятор не генерирует их автоматически для меня.

a == b    =>    !(a<b || b<a)
a != b    =>     (a<b || b<a)
a > b     =>    b < a
a >= b    =>    !(a < b)
a <= b    =>    !(b < a)

Я понимаю, что по соображениям производительности вполне разумно хотеть реализовать больше, чем просто '<',

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

2

Решение

определять operator<() а также operator==(), а также

#include <utility>
using namespace std::rel_ops;

Тогда все операторы сравнения определяются автоматически.
Смотрите пример, предоставленный cppreference.com

3

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

Прочитать о std::rel_ops, Никто не использует это.

3

Ты можешь использовать повышение :: операторов. Он делает именно то, что вы хотите, и многое другое.

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector