2009-04-17 12 views

Antwort

5

Vorstellbar, es könnte Architekturen geben, bei denen ein const-Zeiger eine andere Darstellung als eine nicht-konstante hatte, in welchem ​​Fall der Compiler einen Code ausgeben müsste. Mir sind solche Architekturen jedoch nicht bekannt.

+0

Clever, aber nicht wahr: const ist nur Attribut, es bedeutet nicht, dass Sie nicht schreiben können (betrachten Sie veränderliche Mitglieder). Wenn Sie eine Architektur konzipieren, in der schreibgeschützte und schreibgeschützte oder schreibgeschützte Zeiger unterschiedlich sind, wird der Code immer noch nicht bei der Umwandlung, sondern bei der eigentlichen Schreiboperation generiert. – Suma

+1

Ich habe absichtlich nicht gesagt _wenn_ der Compiler würde etwas Code ausgeben müssen. –

+1

Ist überhaupt nicht wichtig. Der const_cast würde das hypothetische "Nur-Lese-Bit" im Zeiger entfernen, wie es durch einen Const-Zeiger in ein veränderbares Element geschrieben würde. Letzteres kann vom Compiler mit 100% Genauigkeit erkannt werden. – MSalters

12

Nein, es entfernt nur das Attribut const zur Kompilierzeit.

3

const_cast wirft nur die Konstanz eines Attributs und nichts mehr weg.

2

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

Betrachten:

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

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

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

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

Verwandte Themen