C
Tachyon schrieb:
Pointer-Typ->Integer-Casts werden auch oft zum Bit-Knispeln benutzt, z.B. mittels bitweisem xor zum Generieren von Hash-Tabellen.
Sowas meinte ich mit Bit-Knispeln.
Dagegen ist nichts einzuwenden.
Tachyon schrieb:
Mit Bit-Knispel-Cast meine ich die üblichen Pointer-Typ-A->Pointer-Typ-B->Pointer-Typ-A-Casts die man ja in der Regel nicht ausführt, ohne vorher auf dem Pointer-Typ-B rumzurühren. Dabei werden, je nach Intention des Programmieres, die Bits für die Dereferenz von Pointer-Typ-B völlig anders interpetiert, als bei der Dereferenz von Pointer-Typ-A.
Das Resultat der Konvertierung eines Objektzeigers (andere Zeigertypen brauchen wir hier nicht zu betrachten) in einen anderen Objektzeiger ist ein Zeiger, der auf das gleiche Objekt wie der ursprüngliche Zeiger zeigt - vorausgesetzt, dieses Objekt ist hinreichend ausgerichtet. Nullpointer werden in Nullpointer konvertiert. Insoweit besteht kein Problem. Problematisch ist die Aussage über das, was beim Dereferenzieren (genauer: beim Benutzen des Wertes des Objekts über den dereferenzierten Zeiger) passiert, ich verweise der Schreibfaulheit wegen mal hierauf: union problem, grundsätzliche Unterschiede bestehen hier zwischen C und C++ nicht.
"Bit-Schnipsel-Casts" funktionieren (größtenteils) nicht. Die wenigen definierten Fälle fallen kaum unter die Rubrik des Völlig-anders-Interpretierens.
Definierte Anwendungen von "Bit-Schnipseln" müssen Werte zunächst kopieren - ein memcpy aber erfordert keinen expliziten Cast (ja, mit std::copy wäre ein reinterpret_cast nach char* & co. ggf. nötig - aber std::copy ist nicht zwingend)