C++ cast Operatoren
-
volkard schrieb:
Deswegen nehme ich bei trivialen Casts wir von double nach int wie
putPixel(mx+r*cos(phi),mx+r*sin(phi),red);sicher nur den Functional-Style-Cast
putPixel(int(mx+r*cos(phi)),int(mx+r*sin(phi)),red);und nicht den langen langen
putPixel(static_cast<int>(mx+r*cos(phi)),static_cast<int>(mx+r*sin(phi)),red);Naja, gäbe ja noch die Möglichkeit:
int x = static_cast<int>(mx + r * cos(phi)); int y = static_cast<int>(mx + r * sin(phi)); putPixel(x, y, red);Aber ich würde grundsätzlich sagen und das ist in diesem Thread eher untergegangen, dass man mit den neuen C++ Cast Werkzeuge für gezielte Konvertierungsaufgaben erhält. Der C Cast ist einfach ein Hau-Drauf-Cast. Der alte C++ Cast sollte man im übrigen nicht mit dem C Cast verwechseln. Der alte C++ Cast erlaubt die Konvertierung nur zu einfachen Typen. Die einzigen erlaubten Typen sind somit:
char,wchar_t,bool,short,int,long,void,float,double,long doubleund natürlich die jeweils möglichensignedoderunsignedTypen. Zeiger kann man damit nicht konvertieren! Es ist somit ein abgeschwächterstatic_cast. Daher halte ich ihn, gerade in dem von volkard gezeigten Einsatzgebiet, durchaus für eine mögliche Option, da er meiner Meinung nach keine mögliche Fehlerquelle wie der C Cast darstellt.Ich persönlich verwende grundsätzlich fast nur die neuen C++ Cast. Dies auch mit der Begründung der Wiederauffindung, auch wenn ich selber dies als ein sehr schwaches Argument ansehe. Benötigt habe ich es bisher eher nicht. Stören tut es mich aber auch nicht, da ich:
a) sowieso sehr selten Casts überhaupt einsetze.
b) alle Formeln auseinander nehme und zum Beispiel ganz sicher nicht noch etwas im Funktionsaufruf ausrechne. Daher sieht es meistens wie meine vorgeschlagene Möglichkeit des Aufrufs von putPixel aus. Zum Teil ist nicht mal mehr eine Berechnung in den Klammern des Casts, sondern einfach eine Zwischenresultatsvariable.Glossary (speziell für Volkard
)
Neue C++ Cast: static_cast, dynamic_cast, reinterpret_cast, const_cast
Alter C++ Cast: Functional-Style-Cast
C Cast: (T)valueGrüssli
-
Dravere schrieb:
Der alte C++ Cast erlaubt die Konvertierung nur zu einfachen Typen. Die einzigen erlaubten Typen sind somit:
char,wchar_t,bool,short,int,long,void,float,double,long doubleund natürlich die jeweils möglichensignedoderunsignedTypen. Zeiger kann man damit nicht konvertieren! Es ist somit ein abgeschwächterstatic_cast.hm...
typedef int* LPDONTTOUCHME; *LPDONTTOUCHME(17+25)=0xdeadbeef;
-
camper schrieb:
Dravere schrieb:
Der alte C++ Cast erlaubt die Konvertierung nur zu einfachen Typen. Die einzigen erlaubten Typen sind somit:
char,wchar_t,bool,short,int,long,void,float,double,long doubleund natürlich die jeweils möglichensignedoderunsignedTypen. Zeiger kann man damit nicht konvertieren! Es ist somit ein abgeschwächterstatic_cast.hm...
typedef int* LPDONTTOUCHME; *LPDONTTOUCHME(17+25)=0xdeadbeef;Das ist mir sehr neu. Nun frage ich mich allerdings, wieso dann sowas nicht geht:
*int*(17+25)=0xdeadbeef;Problem von der Syntax her? Doch welches? Wieso nur den Umweg über
typedeferlauben?
Auch noch im Standard nachgelesen, aber aus dem werde ich bei dem Punkt nicht so ganz schlau.Grüssli
-
asc schrieb:
Jockelx schrieb:
Hast du das denn wirklich mal gebraucht?
Für mich hört sich dieses Wiederfindbarkeits-Feature irgendwie konstruiert an.
Ich hab's zumindest niemals nutzen müssen und daran wird sich auch ziemlich sicher nichts ändern.Ich habe es mal massiv vermisst, in einen sehr großen Projekt. Irgendwann wurden Umrechnungsfehler gefunden (die aber schon seit langen enthalten waren), und wir mussten fast das gesamte Projekt umwühlen
Was für ein unordentliches Projekt muss das sein?
Das Projekt, an dem ich momentan beteiligt bin, ist nur geringfügig kleiner, aber sollten da Umrechnungsfehler auftreten,
dann müsste ich sicher keine 1 Millionen Zeilen durchsuchen, weil irgendwo -scheinbar weiss keiner wo- irgendwie wild rumgecastet wird.
Da liegt der Fehler wohl weniger am falsch verwendeten cast.
Aber okay, jetzt haben mehrer geschrieben, dass sie ihre Projekte nach casts durchsuchen müssen.
Also von mir aus ist das dann halt auch nich ein Punkt, der für C++-Cast spricht.
Aber ich hoffe wir sind uns einig, dass es einer der letzten Punkte ist, den man anführen sollte.