2009-04-17 9 views

Respuesta

5

Posiblemente, podría haber arquitecturas donde un puntero const tuviera una representación diferente a una no const, en cuyo caso el compilador tendría que emitir algún código. Sin embargo, no conozco ninguna de tales arquitecturas.

+0

Inteligente, pero no verdadero: const es solo un atributo, no significa que no pueda escribir (considere los miembros mutables). Si está concibiendo una arquitectura en la que los punteros de solo lectura y lectura-escritura o solo escritura son diferentes, entonces el código aún no se generará en el molde, sino en la escritura misma. – Suma

+1

Intencionalmente no dije _cuando_ el compilador tendría que emitir algún código. –

+1

No importa en absoluto. Const_cast woud eliminará el hipotético "bit de solo lectura" en el puntero, como lo haría escribir a un miembro mutable a través de un puntero const. El último puede ser detectado con 100% de precisión por el compilador. – MSalters

12

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

3

const_cast simplemente descarta la constness de un atributo y nada más.

2

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

considerar:

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 forma de que la representación de cpi cambie cuando se inicializa pcpci.

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

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

Cuestiones relacionadas