Идея состоит в том, чтобы избежать дублирования кода.Посмотрите этот пример:
class A
{
int a = 0;
public:
A & operator+=(const A& other) { a += other.a; return *this; }
};
Тогда вы могли бы реализовать operator+
с точки зрения operator+=
, сохранив себе дубликат кода и сохранив его как бесплатную функцию:
A operator+(const A& lhs, const A& rhs) { A tmp(lhs); tmp += rhs; return tmp; }
Какиеозначает, что теперь у вас есть две функции.И если вы измените значение +=
, значение +
также изменится.Проще поддерживать.