Я экспериментировал с созданием интерфейсов кода с классами C ++.
И загадочная вещь, возникшая при тестировании, - это перегрузка операторов присваивания. Посмотрите на код ниже:
struct my_object {
// This doesn't work. :(
friend int& operator =(int& variable, my_object object)
{ variable = object.value; return variable; }
// This works, but `int value; value <<= my_object{};`
// for `int value; value = my_object{};` doesn't seem clean...
friend int& operator <<=(int& variable, my_object object)
{ variable = object.value; return variable; }
};
Мое замешательство: Первая перегрузка не компилируется и регистрирует эту ошибку на консольном терминале.
'friend int& operator =(int&, my_object)' must be a nonstatic member function
Но затем вторая перегрузка компилируется без ошибок (или предупреждений), несмотря на то, что она почти идентична первой.
Почему перегрузка первого оператора недопустима, а второй, по-видимому, исправен (по крайней мере, компилятором G CC 6.3.0 )?