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 um
    

    finde ich wesentlich schöner als

    (std::string) "Hallo" // oder gar
    static_cast<int>( 13.4 ) // irgh
    

    Das 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.


Anmelden zum Antworten