wie funktionieren casts intern?
-
Hallo!
Ich habe mal eine rein Informelle Frage: Wie funktionieren eigendlich casts (also static_cast, dynamic_cast, const_cast und reinterpret_cast) intern. Vor allem würde es mich iteressieren ob casts eine Kopie das gecasteten objekts oder das gecastete objekt selbst zurückgeben? (Vor allem beim const cast währe das letztere ja ziemlich übel)Falls bei const_cast das letztere zutrifft, währe es noch gut, zu wissen, wie man dann einen const char* (zum beispiel bei string.c_str()) am besten in einen char* (zum beispiel für send()) umwandelt.
Danke schonmal im voraus.
Grüße
FloFri
-
Hallo
Vor allem würde es mich iteressieren ob casts eine Kopie das gecasteten objekts oder das gecastete objekt selbst zurückgeben?
Wenn du von Objekttyp zu Objekttyp castest wird tatsächlich versucht über einen entsprechenden Konstruktor eine Kopie zu erstellen. Wenn du von Pointer zu Pointer castest, wird nur die Adresse kopiert, die konkrekte Instanz bleibt dieselbe.
Vor allem beim const cast währe das letztere ja ziemlich übel
Ja, deshalb ist const_cast der gefährlichste cast und sollte ausschließlich verwendet werden wenn die Konsequenzen 100% klar sind. Normalerweise sollte man durch vernünftiges Klassendesign und Const Correctness die Notwendigkeit für const_cast vermeiden.
Falls bei const_cast das letztere zutrifft, währe es noch gut, zu wissen, wie man dann einen const char* (zum beispiel bei string.c_str()) am besten in einen char* (zum beispiel für send()) umwandelt.
bei std::string::c_str() (und vergleichbaren Methoden andere String-Klassen) ganz klar Antwort : mit const_cast gar nicht. Es hat einen Grund warum const zurückgegeben wird, const_cast erzeigt hier undefiniertes Verhalten. Venrwende c_str() nur für Ausgabefunktionen (ShellExecute zum Beispiel). Arbeite selber immer mit echten std::strings. Must du wirklich mit C-Strings arbeiten, must du schon selber einen C-String allokieren und mit strncpy den Inhalt von c_str() in den Buffer kopieren.
bis bald
akari
-
Vielen Dank, wieder was wichtiges gelernt
