C-Style Cast vs static_cast



  • Ich kenne die Argumente, finde sie aber schwach, wenn man functional-style-cast strikt nur bei arithmetischen Typen einsetzt. Da kann man nicht aus Versehen const_casten oder reinterpret_casten.

    Das einzige Argument, was dann noch bleibt, ist, dass Casts unschön sind und daher, wenn sie vorkommen, herausstechen sollten.

    Wenn ich mit vielen Kennzahlen obiger Art rechne, habe ich dann aber häufig:

    kennzahl = static_cast<float>(teiler) / nenner;
    

    statt

    kennzahl = float(teiler) / nenner;
    

    und darin sehe ich keinen wirklichen Vorteil außer dass es mehr Tipparbeit ist.

    Habe ich ein Argument übersehen, was hier greift?



  • Eisflamme schrieb:

    Habe ich ein Argument übersehen, was hier greift?

    dass - wie du schon sagtest - es sofort ersichtlich ist und dass man die expliziten casts auch mit der suchfunktion finden kann (nach float suchen wird keinen erfolg zeigen, nach static_cast<float> hingegen schon). sind aber sehr spezifische bedürfnisse, denn viele brauchen diese beiden vorteile gar nicht.

    ich finde, die ganze frage ob man c-casten oder static_casten soll ist sehr vom geschmack des programmierers und vom einsatzort abhängig. wenn du - wie du berichtetest - viele solcher berechnungen und konvertierungen beieinander hast, dann sehe ich den vorteil des static_casts auch nicht, da es da ja einfach zu erkennen ist (heisst nicht, dass ich es nicht schreiben würde, konsistenz und so).



  • Wenn ich so überlege, finde ich die Ersichtlichkeit von float(...) aber genau so gut. Das sticht für mich heraus, schließlich benutzt man in einem Ausdruck nicht einfach so native Typnamen. Außer, es ist als Templateargument vorhanden, aber das lässt sich wiederum gut durch <> unterscheiden.

    Die Suche klappt auch für float(, mir fällt gerade jedenfalls kein Ausdruck ein, bei dem float( sonst vorkommen könnte. 😉 Die einzige Situation ist, wenn man generell nach Casts suchen möchte. Habe ich noch nie getan.



  • Eisflamme schrieb:

    Die Suche klappt auch für float(, mir fällt gerade jedenfalls kein Ausdruck ein, bei dem float( sonst vorkommen könnte. 😉 Die einzige Situation ist, wenn man generell nach Casts suchen möchte. Habe ich noch nie getan.

    function- / method-pointers.



  • Ne, schreib ich:

    typedef float (*returns_float)(float, float, float);
    


  • asdfdasf schrieb:

    um explizite konstruktoren von klassen aufzurufen verwende ich aber diese syntax:

    MyInst = MyClass(42);
    

    in so einem fall finde ich, dass es den konstrukoraufruf eher verdeutlicht als es ein static_cast tun würde.

    Jo. Und für mich fühlt sich float fast wie eine Klasse an, ich mag float(...).


Anmelden zum Antworten