我应该在 class 中实施哪些运算符?

Which operators should I implement in my class?

我已经创建了自己的 class,如下所示:

template<class T>
class ball
{
    T size;
    T price;
};

现在我想支持仅根据第一个值 size 比较两个球,在这种情况下,我是否应该为 ball class 实现所有这些运算符??

==, !=, >=, <=, >, <

这听起来效率不高或不正确。

Which operators should I implement in my class?

一般来说,您至少应该实现您使用的那些运算符。以及您需要 class 来实现的概念所要求的那些。

如果你想让class相等可比较,那么理想的设计是让class也可以使用operator!=进行比较,如果你想让class与有序关系可比,那么理想的设计是让class与所有运算符可比。

should I implement all those operators for ball class??

C++20 之前的版本:是的,如果您希望 class 具有可比性,这是个好主意。

自 C++20 起:不,在大多数情况下您应该只实现 operator<=>。最好默认。


I want to support comparing two balls only according to the first value size

我建议不要将比较运算符定义为这种行为。这会让 class 的用户非常困惑,因为他们可能会期望价格会影响对象的相等性。

如果您需要针对特定​​用例进行这种比较,那么我建议改用自定义比较对象。

另一种解决方案是实现一种支持所有情况的方法。一个优点是您可以在运行时动态选择测试:

// in .hpp
typedef enum { Equal, LessOrEqual, GreaterOrEqual, NotEqual, GreaterThan, LessThan } Comparator;
bool compare(ball & a, ball & b, Comparator c = Equal);

// in .cpp
bool compare(ball & a, ball & b, Comparator c) {
    bool r;
    switch(c) {
        case GreaterOrEqual: case LessThan: r = a.size >= b.size; break;
        case LessOrEqual: case GreaterThan: r = a.size <= b.size; break;  
        default:                            r = a.size == b.size; break;
    }
    return c >= NotEqual ? !r : r;
}