voit to char
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
mit reinterpret_cast hat das nix zu tun, static_cast ist das richtige.
-
von void* zu char* per static cast ? Wann wird denn reinterpret_cast benötigt ?
-
Z.B.:
int value = 500; long* ptr = reinterpret_cast<long*>(value);MfG SideWinder
-
Knuddlbaer schrieb:
von void* zu char* per static cast ? Wann wird denn reinterpret_cast benötigt ?
static_cast macht sichere casts, also welche die ohne hacks und dergleichen ablaufen. zB aus einem int ein double machen. aus einem char* einen int*. im prinzip sind das die "sicheren" umwandlungen.
reinterpret_cast ist der holzhammer - der sagt: schluss aus, ich entscheide jetzt. man kann zB aus einem char* einen double machen oder aus einem char einen void*. im prinzip sind dies die "unsicheren" umwandlungen denn der compiler kann nicht garantieren dass aus einem char ein vernünftiger void* wird. während er aber bei static_cast sehr wohl garantieren kann, dass aus einem void* ein vernünftiger char* wird - vernünftig im sinne von korrekter adresse
-
Ok, ich bin davon ausgegangen das ich void* immer per reinterpret casten muss. Bei dem ganzen Managedzeugs hab ich verdrängt, das void* zu char* ja an sich "nur" ein wechsel der ansicht des Zeigers ist.
Selbstverständlich nimmt mann da static_cast<char*> - thx für die auffrischung.
-
Shade Of Mine schrieb:
Knuddlbaer schrieb:
von void* zu char* per static cast ? Wann wird denn reinterpret_cast benötigt ?
static_cast macht sichere casts, also welche die ohne hacks und dergleichen ablaufen. zB aus einem int ein double machen. aus einem char* einen int*. im prinzip sind das die "sicheren" umwandlungen.
reinterpret_cast ist der holzhammer - der sagt: schluss aus, ich entscheide jetzt. man kann zB aus einem char* einen double machen oder aus einem char einen void*. im prinzip sind dies die "unsicheren" umwandlungen denn der compiler kann nicht garantieren dass aus einem char ein vernünftiger void* wird. während er aber bei static_cast sehr wohl garantieren kann, dass aus einem void* ein vernünftiger char* wird - vernünftig im sinne von korrekter adresse
Es liegt doch auf der Hand, dass man von void* auch mit static_cast casten kann, weil void* eh vom Programmierer interpretiert werden muss. Es ist genau gleich unsicher wie ein reinterpret_cast. Ich finde es allerdings ziemlich dumm, dass man mit static_cast auf void* casten kann.
Beispiel:
#include <iostream> #include <string> int main() { using namespace std; double x; cout << *static_cast<string*>( static_cast<void*>(&x) ) << endl; return 0; }
-
Jeder intelligente mensch macht soetwas nicht!
Und andauern entscheiden was fürn ellenlangen cast ich brauch ist auch blöd.
Wer kam auf die idee, dass die tollen casts besser sind als die guten alten c-style cast?(Mit etwas vorsicht ist das doch kein problem!)
-
Es liegt doch auf der Hand, dass man von void* auch mit static_cast casten kann, weil void* eh vom Programmierer interpretiert werden muss. Es ist genau gleich unsicher wie ein reinterpret_cast.Na so auf der Hand liegt es ja nun nicht, bei einem Template wird es halt nicht klar. Gedanklich hab ich void und void* für den Cast zusammengelegt.
Aber an sich liegt es doch genauso offensichtlich auf der Hand T* zu void* ebenfalls mit static_cast zu casten - mit den gleichen Gründen wie void* zu T*
-
voit --> nervigen rechtschreibfehler seite 99999999
-
gtghfh schrieb:
Wer kam auf die idee, dass die tollen casts besser sind als die guten alten c-style cast?
Weil sie differenzierter und aussagekräftiger sind.
(Mit etwas vorsicht ist das doch kein problem!)
Solltest du irgendwann mal in einem Team programmieren, wirst du es verstehen.
-
und die lösung ist?
-
qewfqefqef schrieb:
und die lösung ist?
42