У нас есть класс (предполагая, что есть некоторые операции в функциях, но конструктор по умолчанию):C++: Как работает членский двоичный оператор?
class X
{
public:
X& operator=(const X& rhs){}
const X& operator+(const X& rhs) const {}
const X& operator+(int m) {}
};
X a, b, c;
Q1: Почему a = a + 5 + c;
разрешено и a = b + c + 5;
нет? Мы имеем:
Ошибка C2679 двоичные «+»: ни один оператор не найден, который принимает правый операнд «Int» типа (или нет приемлемого преобразования).
Q2: Почему (c = a + a) = b + c;
начинается с Ь + операции с и не с + а? (Я нашел это во время отладки).
P.S. Это только теоретический вопрос.
'(c = a + a) = b + c;' - неопределенное поведение, когда вы читаете и записываете одну и ту же переменную в одной точке последовательности. – NathanOliver
offtopic: почему ваш 'operator +' возвращает '&'? Я нашел отличный пример перегрузки операторов в этом [ответе] (http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719) –
@NathanOliver, в Visual Studio он, по крайней мере, отлично работает. Вопрос в том, почему такой порядок? – Archont