Verständnissfrage zum casten
-
also kann mir jemand kurz erklären was das casten genau bedeutet?
vielleicht an den beispielen
CString tmp; tmp=(CString)lptstr; char params[10]="HalloWelt"; CString temp; temp=(CString)params;kann man so alle variablentypen beliebig umwandeln??? Worauf sollte man generell dabei achten?
-
bei wert zu klasse musst du natürlich aufpassen, dass die klasse damit was anfangen kann
falls nich meckert eh der compiler
im falle des CString:
// constructs empty CString CString(); // copy constructor CString(const CString& stringSrc); // from a single character CString(TCHAR ch, int nRepeat = 1); // from an ANSI string (converts to TCHAR) CString(LPCSTR lpsz); // from a UNICODE string (converts to TCHAR) CString(LPCWSTR lpsz); // subset of characters from an ANSI string (converts to TCHAR) CString(LPCSTR lpch, int nLength); // subset of characters from a UNICODE string (converts to TCHAR) CString(LPCWSTR lpch, int nLength); // from unsigned characters CString(const unsigned char* psz);
-
Ich weiß nicht ob der Cast Operator irgendwas mit dem Constructor der CString Klasse zu tun hat (...oder irgendwelcher anderen Klasse die Casted werden soll...).
Ich habe mir da immer gedacht, dass wenn man fundamentale data Typen Casted, muss nur die anzahl der Bytes dieser Variablen übereinstimmen (...sonst gibt es Dataverluste...).
Die CString Klasse beinhalted sowieso nur einen Pointer zu char (sonst nichts anderes), und somit kommt es dann nicht zu irgendwelchen Verlusten - werde ich mal so sagen...
trotzdem bin ich mir da überhaupt nicht so sicher... Ich bin mir nur sicher, dass es nicht das selbe ist wenn man Klassen in andere Klassen Casten will... Da muss man ins reinterpret_cast, dynamic_cast oder static_cast shauen...
MEHR DATA!!!
-
CString tmp; tmp=(CString)lptstr;oder
CString tmp; tmp=lptstr;oder
CString tmp(lptstr);------
CString tmp; tmp=(CString)lptstr;was meiner meinung nach hier passiert:
-temporärer cstring mit lptstr im kontruktor wird erzeugt
-operator = von tmp mit dem temporären cstring wird aufgerufen
-destuktor des temporären strings wird aufgerufenso gesehn is der pseudocast reine verschwendung
-
Also... Wie wäre es damit:
char * pChr = "nekajbdjenkda"; CString pCStr; *((int*)(&pStr)) = (int)pChr;Kein Constructor oder so
Ein bischen Spaß muss sein 
-
um die sache jetzt auf den punkt zu bringen, was habe ich gelernt?
der cast ist nichts anderes als eine werteübergabe. nur müssen dafür spezielle methoden, konstruktor überladene operatoren etc... zur verfügung stehen...
ist das jetzt richtig oder habe ich es immernoch nit geschnallt???falls es so ist, dann gebe ich sovok recht...