用户定义的比较运算符(运算符>运算符<运算符等)

UserDefined Comparison Operator (operator> , operator< etc)

本文关键字:运算符 lt gt 定义 比较 用户      更新时间:2023-10-16

我是用户定义的比较运算符的新手。我正在读一本书,其中提到了以下示例:

struct P { 
           int x, y;
           bool operator<(const P &p) { 
                 if (x != p.x)
                   return x < p.x;
                 else 
                   return y < p.y; } 
         };

我想了解bool operator<(const P &p).特别是我知道bool是运算符的返回类型,即返回值是truefalse

但是我很困惑,<operator<中有什么意义,这个运算符实际上是如何工作的?正在比较哪些值?

P a, b;
bool ret = a < b;

它实际上是:

P a, b;
bool ret = a.operator<(b);  // And < in operator<:  x.operator<(p.x)

这是否有助于您更好地理解?

所以你有一个有两个整数的结构。X 和 Y。上面的代码说的是,如果你所在的结构中的 X(也称为"this")不等于传入 (p) 的结构中的 x,那么在 x 和 p 的 x 之间进行常规小于比较。如果它们相等,则将 y 与 p 的 y 进行比较。

"

运算符<"中"<"的意义在于让编译器知道您正在重载"<"运算符,允许您使用它与 P 类型的结构进行比较。如果不重载自定义类型的 <运算符,则不能使用它来比较其中两个对象。