В соответствии с ответами на этот поток operator= не может быть перегружен как функция, не являющаяся членом. Так, например, следующее делает компилятор очень сердитым:
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
Почему это? У меня есть контейнерный класс с геттерами и сеттерами, поэтому функция-член не нужна, и она разрушит инкапсуляцию. Один из ответов на вышеупомянутый поток сказал, что он должен удостовериться, что "значение L принимается как его первый операнд", но я не совсем понимаю, что это значит. Может кто-нибудь прояснить?
Кроме того, существуют случаи operator=, operator(), operator[] и operator-> "oddball"...? Или я должен реализовать все перегруженные операторы как функции-члены...? (Я знаю, что законно делать иначе, но я ищу лучшую практику.)