Erklär mir das bitte jemand: auto main( int, char* args[] ) -> int



  • Und ich meine nicht, was es tut, das weiß ich, sondern warum ich das mittlerweile in so vielen Foren finde. Ich finde das ehrlich gesagt affig. Nur weil es existiert, muss man es doch nicht mit Gewalt in die main stopfen, die sowieso nur int als return type akzeptiert, zumindest nach dem Standard, der aber Implementierungsdetails erlaubt.

    Deswegen bitte ich mal um Erklärung, wieso das mittlerweile so viele schreiben. Hab ich was übersehen? Hat es einen anderen Vorteil?



  • Die schreiben das so, weil sie den Standpunkt vertreten, dass man nun der Einheitlichkeit halber nun alle Funktionen so deklarieren soll.

    Argumente, die dafür ins Feld getragen werden:
    - Der Funktionsname steht immer an gleicher Stelle und man muss bei langen Rückgabetypen nicht erst nach ihm suchen.
    - Gleiches für den Rückgabetyp. Dieser ist nun durch den Pfeil gut visuell abgegrenzt.
    - Bei manchen Funktionstemplates und bei Lambdafunktionen muss man ohnehin trailing return types verwenden, eine Vereinheitlichung ist hier also wünschenswert.



  • Für mich ist es Lesbarkeit:

    1. Einheitliche Notation statt Mischmasch aus return-Type einmal vorher und einmal nachher.
    Die Wahl fällt da auf die neue Syntax, weil sie mächtiger ist und sich manche Dinge nicht in der
    alten Syntax ausdrücken lassen, z.B. template <typename T> auto f(T x) -> decltype(x.g()); .
    Auch dass man bei außerhalb der Klassendekraration definierten Member-Funktionen für den
    Trailing Return Type Klassen-Scope hat, erlaubt es, manche Dinge übersichtlicher zu schreiben.

    2. Optische Übersichtlichkeit: auto ist immer gleich lang, im Gegensatz zu Typ-Bezeichnern. Daher
    beginnen alle Funktionsnamen in der gleichen Spalte im Texteditor. Das empfinde ich als sehr
    angenehm zu lesen.

    3. Sprechende "mathematische Notation" - auto f(int x) -> double: "Funktion f bildet einen Integer
    x auf einen Double ab á la f:ZRf: \mathbb{Z} \to \mathbb{R}.

    Finn


Anmelden zum Antworten