在阅读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;
我在这里遗漏了一些明显的东西吗?有人可以解释这两种情况吗?