static_cast vs. alten cast-operator
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung 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.
-
volkard schrieb:
string("hallo")
sorry, kurz Offtopic wo ich das hier gerade sehe.
sollte ich string eher so wie oben definieren, oder besser string = "hallo"?
-
Ist total egal.
-
sollte ich string eher so wie oben definieren, oder besser string = "hallo"?
Ja
string myStr = "hallo"; //Konstruktoraufruf + op= string myStr("hallo"); //nur ctor
Zurück zum Thema : ich nehme bei POD typen nach wie vor die "alten" C-casts. static_cast nehme ich, wenn ich einen wirklich häßlichen cast von nicht POD typen mache, ganz einfach weil ich dann schön danach suchen kann und den cast eliminiere sobald mir was besseres einfällt.
-
TheBigW schrieb:
string myStr = "hallo"; //Konstruktoraufruf + op= string myStr("hallo"); //nur ctor
Falsch - das erste ruft auch nur den Konstruktor auf. Die folgende Variante benötigt tatsächlich zwei Funktionen:
string myStr;myStr="hallo";
-
TheBigW schrieb:
sollte ich string eher so wie oben definieren, oder besser string = "hallo"?
Ja
string myStr = "hallo"; //Konstruktoraufruf + op= string myStr("hallo"); //nur ctor
Das ist so nicht korrekt. Wenn überhaupt wird hier der Konvertierungs-Ctor und der Copy-Ctor aufgerufen, was der Compiler allerdings oftmals zu einem Ctor-Aufruf eliminiert. Der Zuweisungsoperator wird hier nicht aufgerufen. Siehe dazu auch: copyvsdirect.
/edit: Zu spät...
Gruß Caipi
-
volkard schrieb:
wenn du anfängst, static_cast<string>("hallo") zu schreiben, überlege ich mir, ob ich static_cast<double>(int) schreibe.
So mache ich das auch nicht. Aber nimm sowas wie von unsigned auf signed gehen(oder umgekehrt). Ich finde, da ist ein static_cast angebracht, weil es häßlich ist und damit auch häßlich aussehen sollte (imho). Kommt zum Beispiel gerne vor, wenn man ältere Libs mit STL benutzt...
MfG Jester
-
string myStr;myStr="hallo";
den Fall meinte ich auch - wieder was gelernt. Trotzdem finde ich in dem Fall string myStr("hallo") schöner.
weil es häßlich ist und damit auch häßlich aussehen sollte
und man dann schön nach den häßlichen Stellen suchen kann. Wenn ich mal nachdenke gilt das eigentlich für fast alle der "neuen" casts. Ich versuche eigentlich, sobald ich sie mache, sie so schnell wie möglich wieder los zu werden.
-
Jester schrieb:
Ich finde, da ist ein static_cast angebracht, weil es häßlich ist und damit auch häßlich aussehen sollte (imho).
ok, dann herrsch ja konsens. nicht aus prinzip den einen oder anderen cast nehmen, sondern häßliche casts eher für häßliche dinge.
-
3 schrieb:
@rapso: dynamic_cast nicht.
erstmal informieren..
natürlich gibts nen
dynamic_cast<T>();Mfg Shade37337
-
shade37337 schrieb:
3 schrieb:
@rapso: dynamic_cast nicht.
erstmal informieren..
natürlich gibts nen
dynamic_cast<T>();Mfg Shade37337
Ich glaube er meinte, dass der dynamic_cast nicht durch die C-Casts ersetzt werden kann:
#include <iostream> struct frucht { virtual ~frucht() {} }; class apfel : public frucht { }; class birne : public frucht { }; int main() { frucht* p = new apfel; std::cout << "C++ sagt:" << std::endl; if(dynamic_cast<apfel*>(p)) { std::cout << "Es ist ein Apfel!" << std::endl; } if(dynamic_cast<birne*>(p)) { std::cout << "Es ist eine Birne!" << std::endl; } std::cout << "\nC sagt:" << std::endl; if((apfel*)(p)) { std::cout << "Es ist ein Apfel!" << std::endl; } if((birne*)(p)) { std::cout << "Es ist eine Birne!" << std::endl; } delete p; }
mfg.