Question

Est-il vrai que const_cast est juste une façon de dire au compilateur « gémissant d'arrêt, traiter comme un pointeur non-const »? Y a-t-il des cas où const_cast est lui-même traduit en code machine réelle?

Était-ce utile?

La solution

On peut imaginer, il pourrait y avoir des architectures où un pointeur const avait une autre représentation à un non-const, auquel cas le compilateur devrait émettre un code. Je ne suis pas au courant de telles architectures, cependant.

Autres conseils

Non, il se contente d'enlever l'attribut const au moment de la compilation.

const_cast jette tout de suite la constness d'un attribut et rien de plus.

const ne change pas la représentation d'un type, en particulier, la représentation des T* est exactement la même que T const*.

Considérez:

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

La représentation des cpi en même temps représente un int* et un int const* via *pcpci.

Il n'y a aucun moyen pour la représentation de cpi à changer quand pcpci est initialisée.

Bien sûr, si les objets pointeur ont des bits non significatifs, le compilateur peut les retourner au hasard; en particulier, const_cast peut retourner les bits non significatifs d'un pointeur, mais une conversion implicite pourrait aussi. Je ne pense pas que ce existe cas dans le monde réel.

Le même appliquer lorsque deux résultats différents de la même valeur d'adresse motifs de bit (base + offset quand offset est assez grand).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top