在Notes On Programming阅读“Alexander Stepanov”一书时,我遇到了他提到的以下问题(第07页)。关于任何 类型T 的 小于(<)运算符 。
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类型。到目前为止,我认为(第二点)以下类型(指针)可能合法。我知道它没有多大意义(比较指针类型不是一个好主意),这也取决于创建了哪个订单对象。
class test { };
test x;
test y;
// &x = 0x7fffffffe0bd, &y = 0x7fffffffe0be
bool out = &y < &x;
//out = 0;
我错过了一些明显的东西吗?有人可以解释这两种情况吗?
答案 0 :(得分:2)
解释使这个定义合法的对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
。