static_cast<char*>(static_cast<void*>(&pod)) vs. reinterpret_cast<char*>(&pod)
-
Icematix schrieb:
Der reinterpret_cast macht seinen Dienst, wird dir eben nicht das korrekte Ergebnis liefern.
So würde zb auf meiner x86-Kisteunsigned int32 var32 = 0xABCDEF00; unsigned int16 var16 = reinterpret_cast<unsigned int16>(var32);var16 0x00EF enthalten während sie bei einem static_cast overflowen würde.
Also mein Compiler weigert sich, das überhaupt zu kompilieren.
Ein Blick in Defining reinterpret_cast for pointer types kann zur Klarstellung dienen.
Im Übrigen bin ich der Ansicht, dass diese Änderung nicht notwendig ist, denn diese Klarstellung ist im Grunde schon in 5.2.10/10 angelegt (abgesehen vom Fall, das von oder zu cv void oder Nullpointer gecastet werden).An lvalue expression of type T1 can be cast to the type “reference to T2” if an expression of type “pointer to T1” can be explicitly converted to the type “pointer to T2” using a reinterpret_cast. That is, a reference cast reinterpret_cast<T&>(x) has the same effect as the conversion *reinterpret_cast<T*>(&x) with the built-in & and * operators. The result is an lvalue that refers to the same object as the source lvalue, but with a different type. No temporary is created, no copy is made, and constructors (12.1) or conversion functions (12.3) are not called.67)
In allen Fällen in denen wir einen denen wir einen dereferenzierbaren Zeiger haben, bestimmt dieser Abschnitt das Ergebnis sowohl eines Refernmz- als auch eine Pointercasts.