Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

11

06.12.2011, 13:32

Also wer in C++ programmiert, sollte auch die C++ Casts verwenden.
So ein Unsinn.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

06.12.2011, 13:35

Wenn ich sicher weiss, dass mir ein Wert geliefert wird, der auf den Zieltyp problemlos gecastet werden kann, löst der Compiler meines Wissens eh mit einem static_cast auf.

Korrekt, in dem Fall wird der Compiler (int) zu einem static_cast machen. In einem anderen Kontext wirds aber vielleicht ein const_cast oder reinterpret_cast oder gar eine komplette Sequenz davon. Und genau darum würd ich von C-Casts abraten: Hinter so einem unschuldigen (int) verbirgt sich evtl. ein richtiges Monster. Einem C++-Cast sieht man dagegen sofort an was genau er tut und was er garantiert nicht tut.
Abgesehen davon sind Casts grundsätzlich sowieso möglichst zu vermeiden, also macht es auch nix wenn ein wenig mehr zu tippen ist, im Gegenteil, C-Casts können in komplexeren Ausdrücken sehr schwer auszumachen sein.
Wenn du in C++ eine hohe Castdichte hast, dann machst du ziemlich sicher irgendwas falsch, außer vielleicht du schreibst grad einen Treiber oder OS Kernel (aber selbst dort braucht man in C++ erstaunlich wenig Casts). Denn überleg mal was du mit einem Cast eigentlich tust: Im Prinzip sagst du dem Compiler damit, dass er bitte ignorieren soll was du ihm bisher so über die beteiligten Objekte erzählt hast: "Ab hier ist alles anders, trust me on this one." Man sollte sich imo eher von vornherein besser überlegen was man dem Compiler über die Objekte erzählt, als sich später immer wieder selbst zu widerrufen ;)

Und ich finde wenn ich viel mit float und int hin und her rechne sind die c-casts doch etwas sparsamer ;)

An deiner Stelle würd ich da lieber erstmal überlegen warum ich eigentlich überhaupt soviel casten muss. Meiner Erfahrung nach sind die meisten solcher Casts unnötig. Außerdem kosten int <-> float Casts (vor allem float -> int kann unter Umständen ziemlich teuer sein), sodass du normalerweise sowieso möglichst lang mit dem selben Typ rechnen willst...

Also wer in C++ programmiert, sollte auch die C++ Casts verwenden.
So ein Unsinn.

Ich find nicht dass das Unsinn wäre. Begründung siehe oben.

Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von »dot« (06.12.2011, 14:16)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

13

06.12.2011, 14:21

Ich habe schon zwei Anfängern dabei geholfen einen Fehler aufzufinden, der durch einen C-Cast ausgelöst wurde, den sie trotz stundenlanger Suche nicht alleine gefunden haben. Sie haben einfach nicht damit gerechnet, dass anders gecastet werden könnte. Bei C++ Casts muss man aber immer darüber nachdenken was man eigentlich will. Ich kann mir gut vorstellen, dass das nicht nur Anfängern passiert. Z.B. wenn sie den Zeiger dereferenzieren und den Wert Casten wollen. Vergessen sie das Dereferenzieren und Casten den Zeiger versacht das einen Fehler den man unter Umständen stundenlang sucht. In dem fall wäre nur ein static_cast gedacht gewesen, stattdessen wird aber ein reinterpret_cast verwendet.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

06.12.2011, 14:24

Bei C++ Casts muss man aber immer darüber nachdenken was man eigentlich will.

Eben. Die C++-Casts zwingen dich dazu, ganz explizit zu sagen was du haben willst. Damit kann es zu Problemen wie den von dir beschriebenen nichtmehr kommen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

06.12.2011, 16:43

Dann sollte man auch noch "explicit" bei Konstruktoren benutzen, auch dadurch entstehen viele versteckte Casts und Fehler.

Werbeanzeige