Реализуйте парные операторы

Когда есть два противоположных оператора, реализуйте оба. Например, если вы реализуете 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);
    }
};