Classes and class hierarchies
C.160
Определяйте операторы прежде всего для имитации традиционного использования
Причина
Минимизируйте неожиданности.
Пример
class X {
public:
// ...
X& operator=(const X&); // функция-член, определяющая присваивание
friend bool operator==(const X&, const X&); // == нуждается в доступе к представлению
// после a = b выполняется a == b
// ...
};
Здесь поддерживается традиционная семантика: копии сравниваются на равенство.
Пример (плохой)
X operator+(X a, X b) { return a.v - b.v; } // плохо: + выполняет вычитание
Примечание
Нечленовые операторы должны быть либо друзьями, либо определены в том же пространстве имён, что и их операнды. Бинарные операторы должны обрабатывать свои операнды эквивалентно.
Контроль
Возможно, невозможно.