In C ++ reinterpret_cast
können nur bestimmte Konvertierungen durchgeführt werden, die in der Sprachspezifikation explizit aufgeführt sind. Kurz gesagt, reinterpret_cast
kann nur Zeiger-zu-Zeiger-Konvertierungen und Referenz-zu-Referenz-Konvertierungen durchführen (plus Zeiger-zu-Ganzzahl- und Ganzzahl-zu-Zeiger-Konvertierungen). Dies steht im Einklang mit der Absicht, die im Namen der Besetzung zum Ausdruck kommt: Sie soll für die Neuinterpretation von Zeigern / Referenzen verwendet werden.
Was Sie versuchen, ist keine Neuinterpretation. Wenn Sie eine int
als neu interpretieren möchten, müssen double
Sie sie in einen Referenztyp konvertieren
double y = reinterpret_cast<double&>(x);
obwohl die äquivalente zeigerbasierte Neuinterpretation wahrscheinlich expliziter ist
double y = *reinterpret_cast<double*>(&x);
Beachten Sie jedoch, dass reinterpret_cast
der tatsächliche Versuch, die Daten über die resultierende Referenz / den resultierenden Zeiger zu lesen , zwar zu einer Konvertierung der Referenz- / Zeigertypen führt, jedoch zu einem undefinierten Verhalten führt.
Und auf jeden Fall kann dies auf einer Plattform mit int
und double
unterschiedlicher Größe nicht viel Sinn machen (da Sie bei größeren Plattformen double
über den von gelesenen Speicher hinaus lesen werden x
).
Am Ende läuft alles auf das hinaus, was Sie erreichen wollten. Neuinterpretation des Gedächtnisses? Siehe oben. Eine Art von Bedeutung int
für die double
Konvertierung? Wenn ja, reinterpret_cast
wird Ihnen hier nicht helfen.