¿Por qué una función tiene la palabra constante al final a pesar de que cambia una variable?

Mi entendimiento de la palabra clave 'const' es que le dice al compilador que la función no modificará ninguna de las variables, pero en el siguiente ejemplo cambia b.d. ¿Por qué?

myClass operator + (myClass b) const { b.d += d; return b; }

preguntado el 28 de julio de 12 a las 14:07

Vuelva a mirar lo que hace con más claridad. -

1 Respuestas

const la función no puede modificar las variables de this(el objeto que llama) (si la variable no es mutable). por ejemplo this no se modifica. entonces, es correcto.

variable b es otro objeto de clase myClass.

myClass operator + (myClass b) const

is

myClass operator + (const myClass* this, myClass b)

mejor usar member-operator += y not member operator +, Por ejemplo

myClass& myClass::operator += (const myClass& rhs)
{
    d += rhs.d;
    return *this;
}

myClass operator + (const MyClass& lhs, const MyClass& rhs)
{
   myClass tmp(lhs);
   tmp += rhs;
   return tmp;
}

Respondido 28 Jul 12, 15:07

Tienes que entender eso b el objeto en sí no es parte de this. Los miembros del objeto que invocó la llamada solo no se pueden modificar. - Mahesh

Mejor pasar en lhs por valor y solo regresar lhs += rhs en mi opinión - Chris

@chris mb. pero prefiero esta firma. - Siempre

@ForEveR: ¿vale la simetría una pérdida de eficiencia;)? - Matthieu M.

@MatthieuM. la copia será en ambos casos (sin tener en cuenta la optimización del compilador). - Siempre

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.