difference between global operator and member operator

c++, operator-overloading

Solution

One reason to use non-member operators (typically declared as friends) is because the left-hand side is the one that does the operation. `Obj::operator+` is fine for:

obj + 2

but for:

2 + obj

it won't work. For this, you need something like:

class Obj
{
    friend Obj operator+(const Obj& lhs, int i);
    friend Obj operator+(int i, const Obj& rhs);
};

Obj operator+(const Obj& lhs, int i) { ... }
Obj operator+(int i, const Obj& rhs) { ... }

Problem

Is there a difference between defining a global operator that takes two references for a class and defining a member operator that takes only the right operand? Global: ``` class X { public: int value; }; bool operator==(X& left, X& right) { return left.value == right.value; }; ``` Member: ``` class X { int value; bool operator==( X& right) { return value == right.value; }; } ```

Original source