2

在阅读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;

我在这里遗漏了一些明显的东西吗?有人可以解释这两种情况吗?

4

1 回答 1

3

解释使这个定义合法的对 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

于 2014-04-20T14:41:27.400 回答