Estoy leyendo un libro sobre C++ y más precisamente sobre la sobrecarga del operador.C++ por qué el operador de asignación debe devolver un const ref para evitar (a = b) = c
El ejemplo es la siguiente:
const Array &Array::operator=(const Array &right)
{
// check self-assignment
// if not self- assignment do the copying
return *this; //enables x=y=z
}
La explicación proporcionada por el libro de volver ref const en lugar de ref es evitar asignaciones tales como (x = y) = z. No entiendo por qué debemos evitar esto. Entiendo que x = y se evalúa primero en este ejemplo y dado que devuelve una referencia constante, la parte = z no se puede ejecutar. ¿Pero por qué?
¿Qué libro? Eso parece una precaución innecesaria para mí. No me puedo imaginar a alguien escribiendo '(x = y) = z' - ¿por qué lo harían? Y sin los parens, 'x = y = z' se analiza como' x = (y = z) ', lo que tiene perfecto sentido, por lo que no hay ningún riesgo allí. –
¿Pero por qué qué? ¿Por qué es una const ref? ¿Por qué se ejecuta en este orden? ¿Por qué no se puede asignar 'z' a (x = y)? – Lazarus
@antronis: consigue un mejor libro de C++. – ybungalobill