Для какого типа T допустимо использование оператора меньше чем (& lt;)?

Пока читаю книгуПримечания по программированию» от Александр Степанов, Я столкнулся со следующими проблемами (Страница-07), упомянутыми им. Это о меньше, чем(<) оператор для любого тип Т.

  • Объясните, почему это неправильно для любого класса Т?
template<typename T>
bool operator<(const T& x, const T& y) {
return true;
}
  • Объясните, какие требования к T делают это определение законным?
template<typename T>
bool operator<(const T& x, const T& y) {
return false;
}

Я не могу понять, что может быть тип T, для которого вышеупомянутый код работает нормально. До сих пор я думал (2-й пункт), что следующие типы (указатели) могут быть законными. Я знаю, что в этом нет особого смысла (не очень хорошая идея сравнивать тип указателя), и это тоже зависит от того, какой объект заказа был создан.

class test { };
test x;
test y;
// &x = 0x7fffffffe0bd, &y = 0x7fffffffe0be
bool out = &y < &x;
//out = 0;

Я что-то упускаю здесь очевидное? Может ли кто-нибудь объяснить об обоих сценариях?

1

Решение

Объясните, какие требования к T делают это определение законным?

template<typename T>
bool operator<(const T& x, const T& y) {
return false;
}

Любой тип, экземпляры которого считаются равными.

a < b; // false
b < a; // false

Вышесказанное прекрасно подходит для a == b, Итак, для согласованности, если T было operator==должно всегда возвращаться true,

2

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


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