C Style Casts sind in einem Codeblock leicht zu übersehen. Casts im C++-Stil sind nicht nur die bessere Praxis, sie bieten auch ein viel höheres Maß an Flexibilität.
reinterpret_cast ermöglicht die Umwandlung von Integral- in Zeigertypen, kann aber bei Missbrauch unsicher sein.
static_cast bietet eine gute Konvertierung für numerische Typen, z.B. von enums zu ints oder ints zu floats oder andere Datentypen, deren Typ Sie sicher sind. Es werden keine Laufzeitprüfungen durchgeführt.
dynamic_cast hingegen führt diese Prüfungen durch und kennzeichnet alle mehrdeutigen Zuweisungen oder Umwandlungen. Es funktioniert nur bei Zeigern und Referenzen und verursacht einen Overhead.
Es gibt noch einige andere, aber das sind die wichtigsten, auf die Sie stoßen werden.
46 Stimmen
Einspruch, Euer Ehren, gefragt und beantwortet .
35 Stimmen
Ich stimme nicht zu, diese andere Frage war über die Beschreibung der Unterschiede zwischen casts in C++ eingeführt. Diese Frage ist über die wirkliche Nützlichkeit von static_cast, die etwas anders ist.
2 Stimmen
Wir könnten die beiden Fragen sicherlich zusammenführen, aber was wir in diesem Thread beibehalten müssten, ist der Vorteil der Verwendung von Funktionen gegenüber dem Casting im C-Stil, der derzeit nur in einer einzeiligen Antwort im anderen Thread erwähnt wird, ohne dass darüber abgestimmt wurde.
0 Stimmen
Ich stimme hoch, weil dieser Link immer noch nützliche Informationen enthält.
7 Stimmen
In dieser Frage geht es um "eingebaute" Typen, wie int, während es in dieser Frage um Klassentypen geht. Das scheint ein so bedeutender Unterschied zu sein, dass er eine separate Erklärung verdient.
13 Stimmen
Static_cast ist eigentlich ein Operator, keine Funktion.
1 Stimmen
@ThomasMcLeod Operatoren sind eine besondere Art von Funktionen (zumindest dachte ich das)
2 Stimmen
@DarthRubik, eigentlich sind Funktionsaufrufe eine Art von Operator. de.wikipedia.org/wiki/Betreiber_in_C_und_C%2B%2B
1 Stimmen
@user153275 Nun, der Titel handelt von primitiven Typen, aber die Frage wirft sie weg. Und die Antworten auch. Ich bin nicht davon überzeugt, dass ich etwas ändern muss. Ziemlich sicher
int x = (int)myfloat;
wird gut funktionieren und das tun, was ich erwarte.