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

What are the type T for which following less than(<) operator is legitimate?

本文关键字:类型 运算符 小于 lt      更新时间:2023-10-16

在阅读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类型是什么。到目前为止,我认为(第二点)以下类型(指针)可能是合法的。我知道这并没有多大意义(比较指针类型不是一个好主意),这也取决于创建了哪个order对象。

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