Gibt es einen Grund, static_cast<>
Casting im C-Stil vorzuziehen ? Sind sie gleichwertig? Gibt es einen Geschwindigkeitsunterschied?
c++
casting
static-cast
Dicroce
quelle
quelle
Antworten:
Casts im C ++ - Stil werden vom Compiler überprüft. Casts im C-Stil sind keine und können zur Laufzeit fehlschlagen.
Außerdem können Casts im C ++ - Stil leicht gesucht werden, während es wirklich schwierig ist, nach Casts im C-Stil zu suchen.
Ein weiterer großer Vorteil ist, dass die 4 verschiedenen Casts im C ++ - Stil die Absicht des Programmierers klarer ausdrücken.
Beim Schreiben von C ++ würde ich so ziemlich immer die C ++ über dem C-Stil verwenden.
quelle
dynamic_cast
s.(int)something
kann nicht fehlschlagen - entweder Sie erhalten eine Umwandlung in int oder einen Compilerfehler.Kurzum :
static_cast<>()
bietet Ihnen die Möglichkeit zur Überprüfung der Kompilierungszeit, C-Style-Besetzung nicht.static_cast<>()
ist besser lesbar und kann überall in einem C ++ - Quellcode leicht entdeckt werden, C_Style Cast ist es nicht.Weitere Erläuterungen :
Die statische Umwandlung führt Konvertierungen zwischen kompatiblen Typen durch . Es ähnelt der Besetzung im C-Stil, ist jedoch restriktiver. Beispielsweise würde die Umwandlung im C-Stil einem ganzzahligen Zeiger erlauben, auf ein Zeichen zu zeigen.
Da dies zu einem 4-Byte-Zeiger (ein Zeiger auf einen 4-Byte-Datentyp) führt, der auf 1 Byte des zugewiesenen Speichers zeigt, verursacht das Schreiben in diesen Zeiger entweder einen Laufzeitfehler oder überschreibt einen benachbarten Speicher.
Im Gegensatz zur Umwandlung im C-Stil kann der Compiler bei der statischen Umwandlung überprüfen, ob die Zeigertypen und Zeigerdatentypen kompatibel sind, sodass der Programmierer diese falsche Zeigerzuweisung während der Kompilierung abfangen kann.
Sie können diese Seite auch auf weitere Erklärungen zu C ++ - Casts überprüfen: Klicken Sie hier
quelle
Siehe Ein Vergleich der C ++ - Casting-Operatoren .
quelle
quelle
Ein großartiger Beitrag, in dem verschiedene Besetzungen in C / C ++ erklärt werden und was die Besetzung im C-Stil wirklich bewirkt: https://anteru.net/blog/2007/12/18/200/index.html
quelle
static_cast
prüft beim Kompilieren, ob die Konvertierung nicht zwischen offensichtlich inkompatiblen Typen erfolgt. Im Gegensatz dazudynamic_cast
wird zur Laufzeit keine Überprüfung der Typkompatibilität durchgeführt. Auch diestatic_cast
Konvertierung ist nicht unbedingt sicher.static_cast
wird verwendet, um vom Zeiger zur Basisklasse zum Zeiger zur abgeleiteten Klasse oder zwischen nativen Typen wie enum to int oder float to int zu konvertieren.Der Benutzer von
static_cast
muss sicherstellen, dass die Konvertierung sicher ist.Die Besetzung im C-Stil führt weder zur Kompilierung noch zur Laufzeit eine Überprüfung durch.
quelle
Da es viele verschiedene Arten von Casting mit jeweils unterschiedlicher Semantik gibt, können Sie mit static_cast <> sagen: "Ich mache eine legale Konvertierung von einem Typ in einen anderen", z. B. von int in double. Eine einfache Besetzung im C-Stil kann viele Dinge bedeuten. Bist du Up / Down Casting? Interpretieren Sie einen Zeiger neu?
quelle