Führt const_cast jemals zu tatsächlicher Code-Emission?

7

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?

    
sharptooth 17.04.2009, 07:04
quelle

4 Antworten

5

Denkbar wäre, dass es Architekturen geben könnte, bei denen ein const-Zeiger eine andere Darstellung als eine nicht-konstante hätte, in diesem Fall müsste der Compiler etwas Code ausgeben. Mir sind solche Architekturen jedoch nicht bekannt.

    
anon 17.04.2009, 07:24
quelle
12

Nein, es entfernt nur das Attribut const zur Kompilierzeit.

    
Lazin 17.04.2009 07:11
quelle
3

const_cast verwirft nur die Konstanz eines Attributs und nichts mehr.

    
Shree 17.04.2009 07:20
quelle
2

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).

    
curiousguy 20.07.2012 18:53
quelle