Ich bin wenig mit der Anwendbarkeit von verwechselt reinterpret_cast
vs static_cast
. Nach dem, was ich gelesen habe, besteht die allgemeine Regel darin, statische Umwandlung zu verwenden, wenn die Typen zur Kompilierungszeit interpretiert werden können, daher das Wort static
. Dies ist die Besetzung, die der C ++ - Compiler intern auch für implizite Besetzungen verwendet.
reinterpret_cast
s sind in zwei Szenarien anwendbar:
- Ganzzahlige Typen in Zeigertypen konvertieren und umgekehrt
- Konvertieren Sie einen Zeigertyp in einen anderen. Die allgemeine Idee, die ich bekomme, ist, dass dies nicht portierbar ist und vermieden werden sollte.
Wo ich ein wenig verwirrt bin, ist eine Verwendung, die ich brauche, ich rufe C ++ von C auf und der C-Code muss das C ++ - Objekt festhalten, damit es im Grunde genommen a enthält void*
. Welche Besetzung sollte verwendet werden, um zwischen dem void *
und dem Klassentyp zu konvertieren ?
Ich habe die Verwendung von beiden gesehen static_cast
und reinterpret_cast
? Obwohl nach dem, was ich gelesen habe, es static
besser erscheint , da die Besetzung zur Kompilierungszeit erfolgen kann? Obwohl es heißt reinterpret_cast
, von einem Zeigertyp in einen anderen zu konvertieren?
reinterpret_cast
passiert nicht zur Laufzeit. Sie sind beide Anweisungen zur Kompilierungszeit. Aus en.cppreference.com/w/cpp/language/reinterpret_cast : "Im Gegensatz zu static_cast, jedoch wie const_cast, wird der Ausdruck reinterpret_cast nicht in CPU-Anweisungen kompiliert. Es handelt sich lediglich um eine Compiler-Direktive, die den Compiler anweist, die Bitfolge zu behandeln (Objektdarstellung) des Ausdrucks, als hätte er den Typ new_type. "