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!


  • Mod

    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-Caster

    const_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 wegcasten

    dynamic_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)


Anmelden zum Antworten