volkard schrieb:
Ah, dem kann ich natürlich nicht zustimmen. Natürlich muß man auch das lernen. Und dann nicht benutzen.
Gut, da hast du natürlich recht. Deswegen habe ich den Link auch durchgelesen und fand den Inhalt sehr interessant. Aber ich hätte es wohl gar nie so gemacht, wie es der Threadersteller gemacht hat
volkard schrieb:
Ich glaube, daß der reinterpret_cast hier aber sauber funktioniert.
Versuche mit
cout<<reinterpret_cast<const ui* const>(&b)
weisen sogar ein wenig in diese Richtung.
Vielleicht erzeugt erst das Auswerten mit * den Müll. Denselben Müll kann man auch ohne reinterpret_cast erzeugen, zum Beispiel mit dieser union mit den beiden Zeigern drin.
Ja, wenn man pingelig sein will, dann ist erst der Dereferenzierungsoperator schuld. Es ist nämlich wohldefiniert, wenn man etwas in einen anderen Zeiger umbiegt, es wieder zurückbiegt und dann darauf zugreift. Also an einem Beispiel:
int a;
char* b = reinterpret_cast<char*>(&a);
int* p = reinterpret_cast<int*>(b);
*p = 10; // <- klar definiert und korrekt.
Es ist nur nicht definiert, was passiert, wenn man auf b zugreift. Aber leider wird reinterpret_cast oft dazu verwendet, genau dies zu erreichen, was der Threadersteller will. Weshalb man diese Unsitte nach dem sehr klar ersichtlichen reinterpret_cast benennt, während der tatsächliche Übeltäter, wegen seiner Unscheinbarheit ungeschoren davon kommt ...
Grüssli