Функция operator==
member объявлена как:
class foo {
public:
bool operator==( foo const & rhs ) const;
};
Функция operator==
global объявлена как:
bool operator==( foo const & lhs, foo const & rhs );
Обычно функция-член объявляется и определяется первой. Затем глобальная функция определяется в терминах функции-члена как
Только одна функция-член объявляется и определяется. Наличие обоих из них неоднозначно для утверждений типа (1) в следующем
foo f1;
foo f2;
bool f1EqualsF2 = (f1 == f2 ); // (1), ambiguous
и в таких случаях компилятор возвращает ошибку. В g ++ сообщение об ошибке выглядит как
equals.cpp:24: error: ambiguous overload for ‘operator==’ in ‘f1 == f2’
equals.cpp:8: note: candidates are: bool foo::operator==(const foo&) const
equals.cpp:17: note: bool operator==(const foo&, const foo&)
Всякий раз, когда operator==
сделан, рекомендуется сделать соответствующий operator!=
.