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.<br>
<br><div class="gmail_quote">El 9 de marzo de 2010 21:58, Carlos Falgueras García <span dir="ltr"><<a href="mailto:fark.zano@gmail.com">fark.zano@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
¡Hola a todos!<div><br></div><div>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.</div>

<div><br></div><div>Os ilustro con un ejemplo sencillo:</div><div><br></div><div><font face="'courier new', monospace">class MiClase{</font></div><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">

<div><font face="'courier new', monospace">private:</font></div></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">

<div><font face="'courier new', monospace">const int atributo_constante;</font></div></blockquote></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">
<div><font face="'courier new', monospace">public:</font></div></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">

<div><font face="'courier new', monospace">MiClase(int argumentos) : atributo_constante(0){</font></div></blockquote></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">
<blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><div><font face="'courier new', monospace">int* p = const_cast<int*>(&atributo_constante);</font></div>

</blockquote></blockquote></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">
<div><font face="'courier new', monospace"><br></font></div></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">

<div><font face="'courier new', monospace">//Complejo algoritmo</font></div></blockquote></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;">
<blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><div><font face="'courier new', monospace">int aux=0;</font></div></blockquote></blockquote>
<blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><div><font face="'courier new', monospace">aux += argumentos*2;</font></div>

<div><font face="'courier new', monospace"><br></font></div><div><font face="'courier new', monospace">//Supuesto cambio de valor</font></div><div><font face="'courier new', monospace">*p=aux;</font></div>

</blockquote></blockquote><blockquote style="margin: 0pt 0pt 0pt 40px; border: medium none; padding: 0px;"><div><font face="'courier new', monospace">}</font></div></blockquote>
</blockquote><div><font face="'courier new', monospace">};</font></div><div><div><br></div><div>He leído en el <a href="http://c.conclase.net/curso/index.php?cap=042#CAS_const" target="_blank">curso de cconclase</a> 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?</div>

<div>He comprobado que funciona como se espera en <a href="http://codepad.org" target="_blank">codepad</a>, aquí tenéis el link: <a href="http://codepad.org/aU9WAXYF" target="_blank">http://codepad.org/aU9WAXYF</a></div>
<div><br></div><div>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;</div>

<div><br></div><div>P.D.: Por supuesto quiero obcecadamente que mi atributo sea constante XD</div><div><br></div><div>¡Muchas gracias de antemano!</div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br>