Это не обязательно является различием между перегрузками оператора friend
и перегрузками оператора функции члена, как это происходит между перегрузками оператора global и перегрузками оператора функции члена.
Одна из причин, почему перегрузка оператора global - это если вы хотите разрешить выражения, в которых тип класса отображается на правой стороне справа двоичного оператора. Например:
Foo f = 100;
int x = 10;
cout << x + f;
Это работает только при наличии глобальной перегрузки оператора для
Foo operator + (int x, const Foo & amp; f);
blockquote>Обратите внимание, что глобальная перегрузка оператора необязательно должна быть функцией
friend
. Это необходимо только в том случае, если ему нужен доступ к частным членамFoo
, но это не всегда так.Независимо, если
Foo
имеет только перегрузку оператора функции члена, например:class Foo { ... Foo operator + (int x); ... };
... тогда мы могли бы иметь только выражения, где в слева оператора плюс появился экземпляр
Foo
.