Richtig Casten
-
Hallo,
ich hab mal ne Frage bezüglich des casten:
Es gibt 4 Arten des Castens:const_cast (zum entfernen eines const)
static_cast (Casten zur Compilierzeit)
dynamic_cast (Casten zur Ausführungszeit)
reinterpreter_cast (Konvertierung zwischen nicht verwandten Typen)Dann kann man aber auch noch:
(Typ)Object
casten.Ist das ein static_cast falls er es zur Kompilierzeit
feststeht ansonsten ein dynamic_cast?Gruß,
Chef-Caster
-
hi,
dass ist imho immer ein reinterpret_cast oder ein static_cast, nie ein dynamic_cast.
[edit: man kann auch Typ(Objekt) casten]
Hoffe ich konnte helfen.
-
dynamic_cast ist Casten innerhalb von Klassenhierarchien zur Laufzeit!
-
Chef-Caster schrieb:
Hallo,
ich hab mal ne Frage bezüglich des casten:
Es gibt 4 Arten des Castens:const_cast (zum entfernen eines const)
static_cast (Casten zur Compilierzeit)
dynamic_cast (Casten zur Ausführungszeit)
reinterpreter_cast (Konvertierung zwischen nicht verwandten Typen)Dann kann man aber auch noch:
(Typ)Object
casten.Ist das ein static_cast falls er es zur Kompilierzeit
feststeht ansonsten ein dynamic_cast?Gruß,
Chef-Casterconst_cast : entfernen und/oder hinzufügen von cv-qualifizierer (d.h. const oder volatile)
static_cast : cast basiserend auf dem statischen typ des operanden. die liste, der erlaubte konvertierungen ist relativ lang, als faustregle gilt, dass konvertierungen, die auch implizit durchgeführt werden, mittels static_cast möglich sind, sowie deren inverses (mit ausnahme von lvalue-zu-rvalue,array-zu-pointer,konvertierung-zu-bool und funktion-zu-pointer), und static_cast can const nicht wegcastendynamic_cast : casten basierend auf dem dynamischen typ des operanden, kann nur auf objekte mit virtuellen funktionen bzw. refernzen oder pointer darauf angewendet werden. damit sind up- (die gehen auch implizit oder per static_cast). down-(das geht auch mit static_cast) und cross-casts möglich.
reinterpret_cast : casts basierend auf dem statischen typ, das ergebnis ist fast immer implementation-defined (sofern überhaupt zulässig)
cast-notation (T)x
führt eine der folgenden casts durch:
- const_cast
- static_cast
- static_cast danach const_cast
- reinterpret_cast
- reinterpret_cast danach const_cast
gibt es mehrere möglichkeiten, so wird die gewählt, die weiter oben in der liste auftaucht.functionale notation ( T(x) )
- 100% equivalent zur cast-notation (allerdings sind nur einfache typ-bezeichner zulässig, und da die meisten unsicheren casts mit referenzen oder pointern stattfinden, ist diese notation nicht ganz so kritisch, sofern man nicht mit typedef typen arbeitet)