Ist static_cast<T>(...) compile-Zeit oder zur Laufzeit?
Ist static_cast<T>(...)
etwas, das getan wird zur compile-Zeit oder zur Laufzeit? Ich habe gegoogelt, aber ich bekam unterschiedliche Antworten.
Auch dynamic_cast<T>(...)
ist offensichtlich runtime - aber was reinterpret_cast<T>(...)
?
- "Statisch"... der Hinweis ist im Namen.
- static_cast führt keine runtime-checks.
- Ausgehend von den vorhandenen Antworten die größere Frage, muss entschieden werden, hier ist, was meinen Sie mit "erledigt wird zur compile-Zeit". Während der Konvertierung zu verwenden gewählt wird, wird zur compile-Zeit die eigentliche Konvertierung selbst kann (und meist wird) sich sehr gut führen conversion-code muss zur Laufzeit ausgeführt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt davon ab, was Sie Gießen, was sonst. E. g.
static_cast<std::string>("Hello")
endet Aufrufstd::string
Konstruktor.Aus der Spitze von meinem Kopf, ich kann nicht denken von jedem Fall, wo
reinterpret_cast
müssten generieren realen Maschine Anweisungen. Es ist nur zu sagen dem compiler: nimm das bit-Muster, und glauben, dass es einen Wert dieses Typs.int
zu einemfloat
? Und wenn ich warf einenfloat
zu einemint
?static_cast<float>(42)
, würde der compiler in der Regel intelligent genug, um einfach ersetzen Sie es mit42f
zur compile-Zeit).-O3
? Oder sollte ich einereinterpret_cast
wenn ich mir sicher bin, was ich Tue, für performance-Intensive numerische wirft?reinterpret_cast
es sei denn absolut notwendig, und Sie verstehen genau, was Sie tun.reinterpret_cast<float>(42)
hat nicht produzieren 42f: es produziert einige floating-point-Wert, der nur zufällig den gleichen bit-Darstellung die ganze Zahl 42. Versuchen Sie es, es beweisen sollte, Bildungseinrichtungen.int
undfloat
sind die gleiche Größe, die Sie nicht dieselbe binäre Darstellung. So einreinterpret_cast
zu konvertieren zwischen den beiden ist fast mit Sicherheit nicht das, was Sie wollen. In der Tat, sollten Sie wahrscheinlich entlassenreinterpret_cast
zusammen, bis Sie genau wissen, was Sie tun.Compile-Zeit. In der Tat, der compiler gar nicht einfügen runtime-code, um zu überprüfen, dass das Ergebnis korrekt ist. Der compiler überprüft, dass die Konvertierung ist es statisch möglich ist, natürlich. Beispiel: Umwandlung von einer Unterklasse einer Oberklasse. Wenn die Konvertierung erfordert die Berufung auf eine vordefinierte oder eine casting-Funktion, Sie wird zur Laufzeit ausgeführt werden, natürlich, aber es werden keine Typ-überprüfung.