Pergunta

É verdade que const_cast é apenas uma maneira de dizer ao compilador "parada gemendo, tratar isso como um ponteiro não-const"? Existem quaisquer casos em que const_cast em si é traduzida em código de máquina real?

Foi útil?

Solução

É concebível, poderia haver arquitecturas onde um ponteiro const tiveram uma representação diferente para um não-const, caso em que o compilador teria que emitem um código. Eu não estou ciente de qualquer dessas arquiteturas, no entanto.

Outras dicas

Não, ele só remove atributo const em tempo de compilação.

const_cast apenas joga fora o constness de um atributo e nada mais.

const não alterar a representação de um tipo, em particular, a representação de T* é exatamente o mesmo que T const*.

Considere o seguinte:

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

A representação de cpi ao mesmo tempo representa um int* e um int const* através *pcpci.

Não há nenhuma maneira para a representação de cpi a mudar quando pcpci é inicializado.

Claro que, se os objetos ponteiro ter bits não significativos, o compilador pode lançá-los aleatoriamente; em particular, const_cast pode inverter os bits não significativas de um ponteiro, mas qualquer conversão implícita poderia também. Eu não acho que neste caso existe no mundo real.

O mesmo se aplica quando dois padrões de bits diferentes resultar no mesmo valor de endereço (base + deslocamento quando o deslocamento é grande o suficiente).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top