¡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 class="Apple-style-span" face="'courier new', monospace">class MiClase{</font></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace">private:</font></div></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace">const int atributo_constante;</font></div></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace">public:</font></div></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace">MiClase(int argumentos) : atributo_constante(0){</font></div></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">int* p = const_cast<int*>(&atributo_constante);</font></div>
</blockquote></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><font class="Apple-style-span" face="'courier new', monospace">//Complejo algoritmo</font></div></blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">int aux=0;</font></div></blockquote></blockquote>
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">aux += argumentos*2;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">//Supuesto cambio de valor</font></div><div><font class="Apple-style-span" face="'courier new', monospace">*p=aux;</font></div>
</blockquote></blockquote><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">}</font></div></blockquote>
</blockquote><div><font class="Apple-style-span" face="'courier new', monospace">};</font></div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><div><br></div><div>He leído en el <a href="http://c.conclase.net/curso/index.php?cap=042#CAS_const">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">codepad</a>, aquí tenéis el link: <a href="http://codepad.org/aU9WAXYF">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>