Pregunta

¿Es cierto que const_cast es sólo una manera de decirle al compilador "parada gimiendo, tratar esto como un puntero no constante"? ¿Hay casos en los que const_cast en sí se traduce en código de máquina real?

¿Fue útil?

Solución

Es concebible que podría haber arquitecturas donde un puntero constante tenía una representación diferente a un ser no constante, en cuyo caso el compilador tendría que emitir algún código. No estoy al tanto de cualquier tipo de arquitecturas, sin embargo.

Otros consejos

No, sólo elimina el atributo const en tiempo de compilación.

const_cast simplemente tira a la basura el constness de un atributo y nada más.

const no cambia la representación de un tipo, en particular, la representación de T* es exactamente el mismo que T const*.

Considere lo siguiente:

int i, 
    * const cpi = &i,
    * const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*

La representación de cpi al mismo tiempo representa un int* y una int const* través *pcpci.

No hay camino para la representación de cpi a cambiar cuando se inicializa pcpci.

Por supuesto, si los objetos tienen bits de puntero no significativas, el compilador puede voltear al azar; en particular, const_cast puede voltear los bits no significativos de un puntero, pero cualquier conversión implícita podría también. No creo que exista este caso en el mundo real.

Lo mismo se aplica cuando dos patrones de bits diferentes dan como resultado el mismo valor de dirección (base + offset cuando desplazamiento se lo suficientemente grande).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top