[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