[C con Clase] passing 'const ...' as 'this' argument of 'void ...' discards qualifiers
Steven Davidson
srd4121 en njit.edu
Mar Mayo 15 03:15:22 CEST 2012
Hola User,
On 5/14/2012 7:28 PM, User wrote:
> Hola,
>
> En efecto, 'other' es constante, no lo he puesto anres, pero es un
> parámetro constante del método 'myClass::doSomething()', El
> prototipo, por tanto, quedaría así: void myClass::doSomething(const
> myObjectType &myObject, const myOtherClass* other) const.
>
> La solución que propones me funciona, pero ¿se podrá hacer constante
> al método 'setMember()' y dejar constante al parámetro 'other'? Lo
> que quiero hacer en 'setMember()' es asignar el valor de
> 'myObject.getMember()' a un miembro de la clase myOtherClass.
>
Como he dicho antes, no tiene sentido que invoques 'setMember()', la
cual por su nombre significa que vas a modificar un miembro de "este
objeto", con un objeto constante. Es como intentar hacer esto:
const int num = 10;
num = 5;
Aparte de ser semánticamente incorrecto, también es una operación
ilógica. Por eso te menciono que revises el diseño de lo que quieres
hacer. Personalmente, si vas a modificar un objeto que es constante,
entonces significa que no tienes las ideas claras.
Ahora bien, hay otra forma de saltarse toda esta lógica, que es
eliminando la parte de 'const' temporalmente a través de 'const_cast'.
La otra solución es la de establecer que 'setMember()' sea constante -
cosa que estoy MUY en contra porque no tiene sentido alguno - pero
indicar que ese miembro a modificar sea "mutable". Por ejemplo,
class myOtherClass
{
mutable int miembro;
...
};
Reitero que debes pensar MUY bien lo que quieres hacer, ya que si
'other' es constante, no tiene sentido modificarlo, y si se debe
modificar, entonces no debería ser constante.
Espero que esto te oriente un poco.
Steven
Más información sobre la lista de distribución Cconclase