C/C++ Warum reinterpret_cast<float> anstatt (float) cast?

... komplette Frage anzeigen

1 Antwort

(typ), also zbs. (float) ist ein C-Cast. Dieser Existiert in C++ lediglich aus dem Grunde, um die Abwärtskompatibilität zu C zu wahren und sollte d.h nicht verwendet werden. Das Problem bei C-Casts ist, das du einen (noch dazu viel zu unauffälligen) cast für alle Zwecke hast, der einfach alles ohne rücksicht auf c++ regeln rübercastet. Das führt oft zu Verwirrung, da zbs. Konstantheit einfach "weggecastet" werden kann, ohne das dies sonderlich ins Auge fällt. Unter C++ Solltest du d.h C++ Casts verwenden. reinterpret_cast() ist im übrigen auch nicht ganz richtig. Du solltest (wenn möglich) immer "static_cast<>()" einsätzen. Genaueres zu dem Thema findest du hier: http://de.wikibooks.org/wiki/C++-Programmierung/_N%C3%BCtzliches/_Casts

LG SK

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von SK199613
27.01.2013, 10:46

... wenn ich mir das so durchlese, habe ich mich etwas blöd ausgedrückt, also ein beispiel:

const char* Test="Hallo!";//Test ist Konstant.
char* TestCastet=NULL;//TestCastet ist nicht Konstant.
TestCastet=(char*)Test;//Der c-cast hat damit kein Problem. Die Konstantheit wird einfach weggecastet.
TestCastet[0]='X';//Wir versuchen nun in den Konstanten Speicher zu schreiben, was aber nicht geht, da dieser Schreibgeschützt ist.
TestCastet=static_cast<char*>(Test);//Der c++ cast aber, macht uns darauf aufmerksam das wir im begriff sind die Konstantheit zu entfernen.Wir können also nicht ohne weiteres casten.
TestCastet=reinterpret_cast<char*>(Test);//das selbe gildet für reinterpret_cast.
TestCastet=const_cast<char*>(Test);//mit const_cast aber können wir die Konstantheit bewust entfernen. Dies sollte aber nur aus Kompatibilitätsgründen mit C gemacht werden.

LG SK

1

Was möchtest Du wissen?