Frage

Ist es wahr dass const_cast Ist das nur eine Möglichkeit, dem Compiler zu sagen: „Hör auf zu jammern, behandle dies als einen nicht konstanten Zeiger“?Gibt es Fälle, in denen const_cast selbst in tatsächlichen Maschinencode übersetzt wird?

War es hilfreich?

Lösung

Es ist denkbar, dass es Architekturen gibt, in denen ein konstanter Zeiger eine andere Darstellung hat als ein nicht konstanter Zeiger. In diesem Fall müsste der Compiler Code ausgeben.Mir sind jedoch keine derartigen Architekturen bekannt.

Andere Tipps

Nein, es entfernt nur const Attribut bei der Kompilierung.

const_cast wirft nur die Konstantheit eines Attributs weg und nichts weiter.

const nicht die Darstellung eines Typs ändern, insbesondere die Darstellung von T* ist genau die gleiche wie T const*.

Bedenken Sie:

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

Die Darstellung von cpi zugleich stellt eine int* und int const* über *pcpci.

Es gibt keine Möglichkeit für die Darstellung von cpi zu ändern, wenn pcpci initialisiert wird.

Natürlich, wenn die Zeiger Objekte nicht-signifikante Bits kann der Compiler sie zufällig Flip; Insbesondere const_cast können die nicht-signifikanten Bits eines Zeigers flip, aber jede implizite Umwandlung könnte auch. Ich glaube nicht, dieser Fall in der realen Welt existiert.

Das gleiche gilt, wenn zwei unterschiedliche Bitmuster in dem gleichen Adressenwert führen (base + Offset, wenn ausreichend groß versetzt ist).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top