C-Casts in C++-Casts?



  • Hallo Leute,

    ich beschäftige mich z. Z. mit der Libxml2. Ich fand dabei folgendes Code-Beispiel

    if (cur_node->type == XML_ELEMENT_NODE  &&
        !xmlStrcmp(child_node->name, (const xmlChar *)"FieldLength") ) {
       // ...
    }
    

    Mein Frage ist, wie ich den Cast (const xmlChar *)"FieldLength" in C++ (static_cast, ...) schreiben würde und warum?!

    Vielen Dank schonmal! 🙂



  • Was ist xmlChar?



  • Laut libxml2 API ein typedef.

    typedef unsigned char xmlChar
    


  • FlatPredator schrieb:

    Mein Frage ist, wie ich den Cast (const xmlChar *)"FieldLength" in C++ (static_cast, ...) schreiben würde und warum?!

    IN C++ würde er so aussehen:

    reinterpret_cast<const xmlChar *>("FieldLength");
    

    Warum?
    Es gibt ja 4 neue Casts in C++. static_cast<>(), const_cast<>(), dynamic_cast<>() und reinterpret_cast<>().
    static_cast<>() kann nicht von oder in andere Zeiger casten (es sei denn der Ziel- oder Ursprungs-Typ ist void*). Also fällt er schonmal weg.
    const_cast<>() castet nur die Konstantheit weg, was wir hier jedoch nicht brauchen, weswegen dieser Cast ebenfalls wegfällt.
    dynamic_cast<>() wird zum sicheren casten innerhalb von Klassenhirarchien eingesetzt (Stichwort Downcast), weswegen er hier auch wegfällt.

    Was bleibt ist reinterpret_cast<>(), der quasi dem Compiler zwingt deine Sicht der Dinge anzunehmen. D.h. mit diesem Cast kannst du die Typsicherheit von C++ umgehen.

    Caipi



  • @Caipi
    Dank dir für die Erklärung! 🙂 👍


Anmelden zum Antworten