Operator Overloading: Member vs Non-Member

You're overloading operator+ for a Matrix class to support expressions like m1 + m2. Which signature is preferred and why?

// Option A: member function
Matrix Matrix::operator+(const Matrix& rhs) const;

// Option B: non-member function
Matrix operator+(const Matrix& lhs, const Matrix& rhs);
A

Either works identically; the choice is purely stylistic

B

Option A: member functions are always more efficient because they avoid an extra parameter

C

Option B: non-member allows implicit conversion on both operands, while member only allows conversion on the right-hand side

D

Option A: symmetric operators must be members per the C++ standard