Domanda

E 'vero che const_cast è solo un modo per dire al "fermata lamenti, trattare questo come un puntatore non-const" compilatore? Ci sono dei casi in cui const_cast si è tradotto in codice macchina reale?

È stato utile?

Soluzione

In teoria, ci potrebbe essere architetture dove un puntatore const aveva una diversa rappresentazione a una non-const, nel qual caso il compilatore dovrebbe emettere un codice. Io non sono a conoscenza di tali architetture, tuttavia.

Altri suggerimenti

No, è solo rimuove attributo const in fase di compilazione.

const_cast solo getta via la costanza di un attributo e nulla più.

const non cambia la rappresentazione di un tipo, in particolare, la rappresentazione di T* è esattamente lo stesso come T const*.

Si consideri:

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

La rappresentazione cpi allo stesso tempo rappresenta un int* e int const* tramite *pcpci.

Non v'è alcun modo per la rappresentazione di cpi a cambiare quando pcpci viene inizializzata.

Naturalmente, se gli oggetti puntatore hanno bit non significativi, il compilatore può capovolgere casuale; in particolare, const_cast possibile capovolgere i bit non significativi di un puntatore, ma qualsiasi conversione implicita poteva anche. Non credo che esista questo caso nel mondo reale.

Lo stesso si applica quando due schemi di bit differenti provocano lo stesso valore di indirizzo (base + offset di cui offset è abbastanza grande).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top