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!
