[C con Clase] ¿const_cast aconsejable o no?

Carlos Falgueras García fark.zano en gmail.com
Mie Mar 10 10:55:38 CET 2010


Gracias por responder Jose!

En principio este atributo sólo se modifica en el constructor de la
clase, y por esto lo quiero declarar constante.
Mi única duda es: ¿Puedo garantizar que el atributo se modifique use
el compilador que use?

En el curso se dice que en algunos compiladores (DevC++ en concreto),
aún utilizando const_cast, la variable no se modifica. ¿Ocurre lo
mismo con los atributos de una clase?

El 10/03/10, Jose Cabrera <josmaca en gmail.com> escribió:
> 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
>>
>




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