Die Frage wurde in einer Diskussion bei StackOverflow gestellt.
Gibt es eine klare Unterscheidung zwischen den beiden Konzepten Cast und Convert (in Bezug auf den Typ eines Objekts), oder beschreiben diese beiden Wörter genau dasselbe? Wie wäre es mit anderen Sprachen als C ++, Python und Java? EDIT : Was passiert , wenn die Typen in Frage sind primitive Typen, wie int
zu float
?
AbstractSprite
Weile halten und überhaupt keine Ahnung haben, dass es tatsächlich eine istBigGreenTreeSprite
?Verschiedene Sprachen definieren die Wörter "cast" und "convert" unterschiedlich. Ich denke nicht, dass die Frage anders aussagekräftig ist als in Bezug auf eine bestimmte Sprache.
In C bezieht sich der Begriff "Umwandlung" beispielsweise nur auf einen expliziten Umwandlungsoperator, der aus einem Typnamen in Klammern vor dem zu konvertierenden Ausdruck besteht. Eine "Konvertierung" konvertiert einen Wert eines Typs in einen Wert eines anderen Typs. Einige Konvertierungen werden implementiert, indem die Bits, aus denen die Darstellung besteht, neu interpretiert werden. Sie werden jedoch als Wert-zu-Wert-Konvertierung definiert. (Ja, das gilt auch für Zeigerkonvertierungen. Unterschiedliche Zeigertypen können unterschiedliche Darstellungen haben.)
Beachten Sie, dass es in C keine "implizite Besetzung" gibt.
Einige Konvertierungen sind explizit und werden von einem Cast-Operator angegeben. Andere sind implizit und werden in bestimmten Fällen angewendet, wenn ein Ausdruck eines Typs in einem Kontext verwendet wird, der einen Ausdruck eines anderen Typs benötigt. Die durchgeführte Konvertierung ist in beiden Fällen genau gleich.
Zum Beispiel:
C ++ ist ähnlich; Es hat die gleichen Abgüsse und Umrüstungen wie C, und es fügt eine funktionale Notation entspricht einem gegossenen Ausdruck C-Stil, plus 4 spezifischere Stichwort:
const_cast
,dynamic_cast
,reinterpret_cast
, undstatic_cast
.quelle
(int)1.5-2*(int)(-1.5)
3 Ertrag, 4, 5 oder 6, aber wenn(int)
hatte mit ersetzt wordentruncInt
,roundPeriodicInt
,floorInt
, oderroundEvenInt
, ...Round
oderTrunc
--IMHO ein viel saubereres Design.Während des Castings lesen Sie die Instanz einer Klasse so, als wäre es die Instanz einer anderen Klasse. Es könnte für dieses Klassenpaar anwendbar sein oder nicht. Keine Laufzeitarbeit außer Überprüfung. Oft kann die mögliche Inkompatibilität beim Kompilieren festgestellt werden.
Während der Konvertierung kombinieren Sie Felder einer Instanz einer Klasse neu oder zählen sie in eine Instanz einer anderen Klasse um. Wenn es eine Funktion dafür gibt, kann sie für genau diese Instanz anwendbar sein oder nicht. Die gesamte Arbeit wird zur Laufzeit erledigt. Beim Kompilieren konnte kein Fehler überprüft werden.
quelle