¿Por qué devolver un valor const? Considere lo siguiente (y disculpen los nombres de las variables sin imaginación):
struct A { int a; };
A operator+(const A& a1, const A& a2)
{
A a3 = { a1.a + a2.a };
return a3;
}
Dado que la declaración de operator+
, puedo hacer lo siguiente:
A a = {2}, b = {3}, c = {4}, d = ((a+b) = c);
Así es, me acaba de asignar a la temporal A
que fue devuelto por operator+
. El valor resultante de d.a
es 4, no 5.Si se cambia el tipo de devolución de operator+
a const A
se evita esta asignación, lo que provoca que la expresión (a+b) = c
genere un error de compilación.
Si trato de asignar a un puntero o entero devuelto por una función, mi compilador (MSVC) genera un error de "operando izquierdo debe ser l-value", que parece consistente con el compilador ARM que le dice que la const el puntero no tiene sentido; el puntero no se puede asignar de todos modos. Pero para clases/estructuras, aparentemente está bien asignar valores de retorno no const.
¿Qué indicadores de compilación y compilación estás usando? – Trent
RVCT 3.1 y no sé qué banderas las entrañas de las banderas del sistema de compilación están ocultas de nosotros simples mortales – Dynite