Оператор присваивания может быть перегружен с использованием функции-члена, но не является функцией не-члена friend
:
class Test
{
int a;
public:
Test(int x)
:a(x)
{}
friend Test& operator=(Test &obj1, Test &obj2);
};
Test& operator=(Test &obj1, Test &obj2)//Not implemented fully. just for test.
{
return obj1;
}
Он вызывает эту ошибку:
ошибка C2801: 'operator =' должен быть нестационарным членом
Почему не может использоваться функция friend
для перегрузки оператора присваивания? Компилятор позволяет перегрузить другие операторы, такие как +=
и -=
, используя friend
. Какая внутренняя проблема/ограничение в поддержке operator=
?