[C con Clase] passing 'const ...' as 'this' argument of 'void ...' discards qualifiers

User usuarioanonimomysql en gmail.com
Mar Mayo 15 12:01:08 CEST 2012


Hola,

Es sólo para aprender el uso de const y para dominarlo bien. ¿Me podrías
poner un ejemplo de eliminar la parte de 'const' temporalmente a través de
'const_cast'? Probaré lo de mutable.

Saludos.

El 15 de mayo de 2012 03:15, Steven Davidson <srd4121 en njit.edu> escribió:

> 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
>
>
> ______________________________**_________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/**mailman/listinfo/cconclase_**
> listas.conclase.net<http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net>
> Bajas: http://listas.conclase.net/**index.php?gid=2&mnu=FAQ<http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120515/c83a9ffd/attachment.html>


Más información sobre la lista de distribución Cconclase