Пока читаю книгуПримечания по программированию» от Александр Степанов, Я столкнулся со следующими проблемами (Страница-07), упомянутыми им. Это о меньше, чем(<) оператор для любого тип Т.
template<typename T> bool operator<(const T& x, const T& y) { return true; }
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;
Я что-то упускаю здесь очевидное? Может ли кто-нибудь объяснить об обоих сценариях?
Объясните, какие требования к 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
,