Será const_cast nunca causar emissão de código real?
-
09-09-2019 - |
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?
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).