Ich bin etwas verwirrt über die Anwendbarkeit von reinterpret_cast
対 static_cast
. Nach dem, was ich gelesen habe, sind die allgemeinen Regeln statische Besetzung zu verwenden, wenn die Typen zur Kompilierzeit interpretiert werden können, daher das Wort static
. Dies ist der Cast, den der C++-Compiler intern auch für implizite Casts verwendet.
reinterpret_cast
s sind in zwei Szenarien anwendbar:
- Ganzzahlige Typen in Zeigertypen umwandeln und umgekehrt
- einen Zeigertyp in einen anderen umwandeln. Die allgemeine Vorstellung, die ich bekomme, ist, dass dies unportabel ist und vermieden werden sollte.
Wo ich ein wenig verwirrt bin, ist eine Verwendung, die ich benötige, ich rufe C++ von C und der C-Code muss auf das C++-Objekt halten, so dass im Grunde hält es eine void*
. Welcher Cast sollte verwendet werden, um zwischen den void *
und den Klassentyp?
Ich habe die Verwendung von beidem gesehen static_cast
y reinterpret_cast
? Doch nach dem, was ich gelesen habe, scheint es static
besser ist, da der Cast zur Kompilierzeit erfolgen kann? Obwohl es heißt, man solle reinterpret_cast
um von einem Zeigertyp in einen anderen umzuwandeln?
30 Stimmen
reinterpret_cast
findet nicht zur Laufzeit statt. Beides sind Anweisungen zur Kompilierzeit. Von de.cppreference.com/w/cpp/language/reinterpret_cast : "Im Gegensatz zu static_cast, aber wie const_cast, wird der Ausdruck reinterpret_cast nicht in CPU-Anweisungen kompiliert. Es handelt sich um eine reine Compilerdirektive, die den Compiler anweist, die Bitfolge (Objektdarstellung) des Ausdrucks so zu behandeln, als hätte sie den Typ new_type."0 Stimmen
@HeretoLearn, ist es möglich, die relevanten Codestücke aus der *.c und *.cpp Datei hinzuzufügen? Ich denke, das kann die Aussagekraft der Frage verbessern.