Stimmt es, dass const_cast nur eine Möglichkeit ist, dem Compiler zu sagen: "Hör auf zu jammern, behandle das als nicht-konstanten Zeiger"? Gibt es Fälle, in denen const_cast selbst in tatsächlichen Maschinencode übersetzt wird?
const
ändert nicht die Darstellung eines Typs, insbesondere ist die Darstellung von T*
genau gleich T const*
.
Überlegen Sie:
%Vor% Die Repräsentation von cpi
zur selben Zeit repräsentiert eine int*
und eine int const*
via *pcpci
.
Die Darstellung von cpi
kann nicht geändert werden, wenn pcpci
initialisiert ist.
Natürlich, wenn die Zeigerobjekte nicht signifikante Bits haben, kann der Compiler sie zufällig umdrehen; Insbesondere kann const_cast
die nicht signifikanten Bits eines Zeigers spiegeln, aber auch jede implizite Konvertierung könnte dies tun. Ich glaube nicht, dass dieser Fall in der realen Welt existiert.
Dasselbe gilt, wenn zwei verschiedene Bitmuster denselben Adresswert ergeben (Basis + Offset, wenn Offset groß genug ist).
Tags und Links const c++ const-cast data-representation memory-model