以下小于(<)运算符是合法的类型T是什么?

时间:2014-04-20 14:38:37

标签: c++ c++11 operator-overloading c++-concepts

Notes On Programming阅读“Alexander Stepanov”一书时,我遇到了他提到的以下问题(第07页)。关于任何 类型T 小于(<)运算符

  • 解释为什么这对任何一个班级T都错了?
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类型。到目前为止,我认为(第二点)以下类型(指针)可能合法。我知道它没有多大意义(比较指针类型不是一个好主意),这也取决于创建了哪个订单对象。

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

我错过了一些明显的东西吗?有人可以解释这两种情况吗?

1 个答案:

答案 0 :(得分:2)

  

解释使这个定义合法的对T的要求是什么?

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

其实例都被视为“相等”的任何类型。

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

以上对a == b完全没问题。因此,为了保持一致性,如果Toperator==,则应始终返回true