[C con Clase] ¿const_cast aconsejable o no?

Jose Cabrera josmaca en gmail.com
Mie Mar 10 07:37:23 CET 2010


El atributo esta dentro de una clase con lo cual únicamente se podrá
modificar desde dentro de esa clase, o con una clase amiga, si aun así
necesitas que sea constante, desde mi punto de vista ya esta muy protegido
por la clase, creo que el único método que te queda es el const_cast, y aun
así tendrías que hacerlo con una función publica.

El 9 de marzo de 2010 21:58, Carlos Falgueras García
<fark.zano en gmail.com>escribió:

> ¡Hola a todos!
>
> Escribo para pediros vuestra opinión sobre el uso de const_cast para
> cambiar el valor de una constante, en concreto un atributo constante de una
> clase cualquiera. Se que el valor de los atributos constantes de una clase
> debe pasarse en los inicializadores(no estoy seguro de que se llamen así
> :S) del constructor, pero en mi caso me resulta imposible pues el valor de
> estos lo calculo con un algoritmo complejo.
>
> Os ilustro con un ejemplo sencillo:
>
> class MiClase{
>
> private:
>
> const int atributo_constante;
>
> public:
>
> MiClase(int argumentos) : atributo_constante(0){
>
> int* p = const_cast<int*>(&atributo_constante);
>
>
> //Complejo algoritmo
>
> int aux=0;
>
> aux += argumentos*2;
>
> //Supuesto cambio de valor
> *p=aux;
>
> }
>
> };
>
> He leído en el curso de cconclase<http://c.conclase.net/curso/index.php?cap=042#CAS_const>que esto puede no cambiar realmente el valor de la constante dependiendo del
> compilador. ¿Es esto siempre así, aún refiriéndonos a un atributo y no a una
> clase?
> He comprobado que funciona como se espera en codepad <http://codepad.org>,
> aquí tenéis el link: http://codepad.org/aU9WAXYF
>
> Si la respuesta es que esto es desaconsejable, inútil o "deberías estar
> loco para hacer algo así" , os agradecería que me indicarais si existe
> alguna otra forma de hacer esta asignación;
>
> P.D.: Por supuesto quiero obcecadamente que mi atributo sea constante XD
>
> ¡Muchas gracias de antemano!
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: 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/20100310/2dd1f884/attachment.html>


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