wieso casting
-
wieso nutzen in letzter zeit so viele leute ein überflüssiges cast, obwohl c++ schwache typentrennung unterstützt? und wenn man ein mal explizit konvertieren möchte nimmt man die konvertierungsoperatoren. casts sind rudimentäre objekte von c und deuten auf schlechten code!
http://www.c-plusplus.net/forum/283426 reinterpret_cast
http://www.c-plusplus.net/forum/283395 static_cast
http://www.c-plusplus.net/forum/283355 reinterpret_cast
-
jgjhgjhfg schrieb:
wieso nutzen in letzter zeit so viele leute ein überflüssiges cast, obwohl c++ schwache typentrennung unterstützt? und wenn man ein mal explizit konvertieren möchte nimmt man die konvertierungsoperatoren. casts sind rudimentäre objekte von c und deuten auf schlechten code!
http://www.c-plusplus.net/forum/283426 reinterpret_cast
http://www.c-plusplus.net/forum/283395 static_cast
http://www.c-plusplus.net/forum/283355 reinterpret_castMach die Anfrage mal konkreter.
-
edit: Falls ich im folgenden andere Casts kommentiert habe als du meintest, dann liegt das an deiner unpräzisen Ausdrucksweise.
jgjhgjhfg schrieb:
http://www.c-plusplus.net/forum/283426 reinterpret_cast
Ja, einen eigenen Konvertierungsoperator für char* zu unsigned char* schreiben. Geht bestimmt supi.
http://www.c-plusplus.net/forum/283395 static_cast
Ja, einen eigenen Konvertierungsoperator für unsigned int zu double schreiben. Geht bestimmt supi.
http://www.c-plusplus.net/forum/283355 reinterpret_cast
Ja, einen eigenen Konvertierungsoperator für char* zu int* schreiben. Geht bestimmt supi.
Außerdem sind viele Konvertierungsoperatoren doof. Man verliert leicht die Kontrolle darüber was erlaubt ist und was nicht. Implizite Konvertierungen sind der schnellst Weg, den Compiler unsinnigen Code schlucken zu lassen, ohne dass man es selber beabsichtigt. Und das geht gegen den guten Stil von C++ wo ein Logikfehler möglichst auch ein Compilerfehler sein soll. Durch den expliziten Cast macht man aber deutlich, dass man sich an dieser Stelle (und nur an dieser Stelle!) ganz sicher ist, dass das Ergebnis trotzdem richtig ist.
Und das ist der gute Grund, warum es auch in der Standardbibliothek z.B. keinen Konvertierungsoperator std::string
const char* gibt, sondern man dafür c_str() bemühen muss.
-
jgjhgjhfg schrieb:
wieso nutzen in letzter zeit so viele leute ein überflüssiges cast, obwohl c++ schwache typentrennung unterstützt?
- Weil einige C++-Programmierer was gegen implizite Umwandlungen haben.
- Weil man dadurch Warnungen bekommt, die an anderen Orten auf Fehler hinweisen und dadurch besser angeschaltet bleiben.
- Weil man Code ausdrucksstark machen möchte.
- Weil ein impliziter Cast gar nicht möglich ist (siehe SeppJ).