Kann man jedes C++-Programm cast-frei schreiben?
-
LordJaxom schrieb:
std::string( "Hallo" ) // konstruiere einen std::string aus dem C-String "hallo" int( 13.4 ) // Wandle 13.4 in ein Integer umfinde ich wesentlich schöner als
(std::string) "Hallo" // oder gar static_cast<int>( 13.4 ) // irghDas ist jetzt eine Frage, wie man das Bezeichnet. Ich lese bei int(13.4) einen Konstuktoraufruf. Und zwar gewissermassen den hypotetischen Konstruktor int::int(int), wobei das 13.4 implizit in ein int gecastet wird. Das ist also genau das selbe wie std::string("Hallo"). Das finde ich in C++ so schön, daß die internen Typen genau wie selbst definierte behandelt werden. Dein static_cast ist wirklich irgh oder auch
. Ein wenig übertrieben, aber es ist schön, daß man es so explizit hin schreiben kann, wenn man diesen Umstand betonen möchte. Das ist halt Sprachreichtum.Tntnet
-
HumeSikkins schrieb:
otze schrieb:
camper schrieb:
warum sollte man das wollen?
[...]Natürlich spricht nichts gegen implizite casts[...]
Bis auf die Tatsache, dass es soetwas nicht gibt

casts sind *explizite* Typkonvertierungen und können somit schwer implizit passieren.Ok, akzeptiert ;). Ist der ausdruck "implizite Typkonvertierung" besser?
insbesondere dem function-style-cast entkommt man nur schwer, wenn man lesbaren und einigermaßen kompakten code schreiben will, schon ein simples
std::string("foo")ist ja so etwas.
Ich würde mal vermuten, dass dies mit einer impliziten Typkonvertierung in 99% der Fälle ohne cast hinhaut. Das letzte prozent geht für implizite Typkonvertierungen drauf, die nicht eindeutig sind.