265 Stimmen

Sollte ich static_cast oder reinterpret_cast beim Casting eines void* zu was auch immer verwenden

Beide static_cast y reinterpret_cast scheinen beim Gießen gut zu funktionieren void* auf einen anderen Zeigertyp. Gibt es einen guten Grund, den einen dem anderen vorzuziehen?

82 Stimmen

@anon Offenbar haben Sie noch nie mit POSIX-Threads gearbeitet.

10 Stimmen

@user470379 Wow... das ist der Grund, warum ich bei SO auf diese Frage gestoßen bin! Ausgezeichnete Beobachtung :-).

0voto

Pavel Radzivilovsky Punkte 18418

Ich schlage vor, immer den schwächsten möglichen Wurf zu verwenden.

reinterpret_cast kann verwendet werden, um einen Zeiger auf einen float . Je strukturbrechender der Wurf ist, desto mehr Aufmerksamkeit erfordert seine Verwendung.

Im Falle von char* würde ich c-style cast verwenden, bis wir einige reinterpret_pointer_cast weil sie schwächer ist und nichts anderes ausreicht.

3 Stimmen

" reinterpret_cast kann verwendet werden, um einen Zeiger in einen Float zu verwandeln. " Ganz sicher nicht!

0 Stimmen

Sicherlich ja, Neugieriger. Prüfen Sie die Norm erneut.

0 Stimmen

" Überprüfen Sie die Norm erneut. " Haben Sie den Standard überprüft?

0voto

Asha Punkte 10607

Verwenden Sie static_cast für diese. Nur in den seltensten Fällen, wenn es keine andere Möglichkeit gibt, verwenden Sie reinterpret_cast .

-3voto

mukeshkumar Punkte 2630

reinterpret_cast konvertiert zwangsweise die void* auf den Zieldatentyp. Dies garantiert keine Sicherheit und Ihr Programm könnte abstürzen, da das zugrundeliegende Objekt alles Mögliche sein könnte.

Sie könnten zum Beispiel eine Typisierung myclass* à void* und verwenden Sie dann reinterpret_cast um sie in yourclass* die ein völlig anderes Layout haben können.

Daher ist es besser und empfehlenswert, Folgendes zu verwenden static_cast

3 Stimmen

Static_cast wird dies nicht verhindern. Sobald ein Zeiger in ein void* degeneriert ist, können Sie ihn mit static_cast in einen beliebigen Zeigertyp umwandeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X