Реализуйте парные операторы
Когда есть два противоположных оператора, реализуйте оба. Например, если вы реализуете operator==, реализуйте и operator!= тоже. Это избавляет от неожиданных проблем с компиляцией и нарушения принципа наименьшего удивления.
Пример:
class Book
{
public:
// ...
// Правильно: одна const-версия, работает и для const, и для не-const объектов
bool operator==(const Book& other) const // <- const в конце
{
return title_ == other.title_ && year_ == other.year_;
}
// operator!= можно реализовать через operator==
bool operator!=(const Book& other) const
{
return !(*this == other);
}
};