Was macht das
? %Vor%besser als das
%Vor%beim Umwandeln eines primitiven Datentyps in einen anderen?
Ich habe viel Legacy-Code, der in ähnlichen Situationen den zweiten Stil für das Typcasting verwendet, also ist dies auch eine Frage, ob ich den Code nicht vollständig überarbeiten darf.
Zukunftssicherheit.
Sagen wir, in Zukunft mache ich das:
%Vor% Nun beendet int i = static_cast<int>(f);
das Kompilieren, aber int i = (int)f;
macht reinterpret_cast
.
static_cast<int>
ist das ist genau das, was ich tun soll . (int)
ist tu was immer du kannst, um mir einen int zu besorgen. Mit letzterem wird der Compiler nicht umgehen, um einen int
-Wert zu erhalten, und das ist selten (nie?) Wünschenswert.
Das jedes einzelne Mal ist ein Hinweis darauf.
Sie sollten nicht so oft zwischen primitiven Typen konvertieren, dass jedes Mal, wenn Sie ein paar zusätzliche Zeichen eingeben, eine mühsame Aufgabe ist. Es ist wie beschweren, dass Sie jedes Mal einen Helm tragen müssen, wenn Sie eine gefährliche Tätigkeit ausüben. Wenn Sie das Tragen des Helms als störend empfinden, liegt das Problem wahrscheinlich darin, dass Sie zu oft gefährliche Aktivitäten ausführen und nicht nur die Helmpflicht.
Wie Sie Legacy-Code adressieren, können Sie diese Frage für einige Antworten (einschließlich meiner eigenen).
Ja, sollten Sie.
Casts sind eine Hauptquelle für Bugs. Sie sind Wege um das Typ-System, das einer der besten Bug-Catcher für Programmierer ist.
Ein static_cast ist viel sichtbarer und viel spezifischer als ein alter C-Style-Cast. Sie wollen, dass sie auffallen. Sie möchten, dass sie beim Debuggen offensichtlich sind. Sie möchten, dass der nächste Programmierer mitkommt, um zu verstehen, warum Sie es tun.
Die Tatsache, dass es schwieriger ist, static_cast<blah>(foo)
einzugeben, ist auch ein Vorteil, da es Sie dazu ermutigt, nur dann zu wirken, wenn es absolut notwendig ist.
Ein Konstruktorcast ist eine Alternative. Angenommen, es ist ein Konvertierungskonstruktor definiert. Zum Beispiel:
%Vor% Allerdings sollten Sie static_cast
und andere C ++ - Casts definitiv einem C-Style-Cast vorziehen, da diese im Grunde sagen: "Probieren Sie jeden Cast, bis etwas funktioniert", was schließlich zu einem reinterpret_cast
führt und Ihnen wahrscheinlich ein falsches Verhalten verleiht .
Tags und Links c++ coding-style casting primitive