Was sind eure Highlights von C++14?





  • Ich mag std::dynarray , die neuen user-defined literals in der Standardbibliothek, natürlich automatisch erkannte Rückgabetypen und polymorphe Lambdas...

    Aber bei mir ganz vorne dabei, der swap-Operator:

    a :=: b;
    

    Auch überladbar in Klassen, etc. 🙂



  • Sone schrieb:

    ie neuen user-defined literals in der Standardbibliothek

    Kannst du eine Referenz dafür geben?



  • Benutzernamen schrieb:

    Sone schrieb:

    ie neuen user-defined literals in der Standardbibliothek

    Kannst du eine Referenz dafür geben?

    Laut http://gcc.gnu.org/projects/cxx0x.html schon in gcc 4.7 drin??? 😕 😮



  • und damit schon in C++11. Was ist da neu bei C++14?



  • In der Standardbibliothek? Nein. Nur UDLs als Sprachfeature. N3531 beschreibt was ich meinte, und das gibt es - aber erst seit C++14.

    Hier übrigens ein erster ISO-Draft von C++14: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf



  • Sone schrieb:

    Aber bei mir ganz vorne dabei, der swap-Operator:

    a :=: b;
    

    Auch überladbar in Klassen, etc.

    Der wird ja hoffentlich in breiter Front abgelehnt. Darauf hat nun wirklich niemand gewartet...

    Im Bezug auf Bibliotheksfeatures finde ich std::make_unique und std::optional noch nett.

    <💡>



  • Sone schrieb:

    In der Standardbibliothek? Nein. Nur UDLs als Sprachfeature. N3531 beschreibt was ich meinte, und das gibt es - aber erst seit C++14.

    Hier übrigens ein erster ISO-Draft von C++14: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf

    Also für strings, complex und chrono, richtig?



  • Hm, schwierig, da gab es einige sehr gute Proposals 🙂
    Vieles wird es wohl nicht in den Standard schaffen.

    Mich reizt zum einen die Bugfixes, welche mit C++14 für C++11 kommen,
    und damit C++11 vervollständigen, und die bessere concurrency unterstützung.
    Die Idee von resumable functions (async/await) finde ich recht reizvoll z.B.



  • Sone schrieb:

    Aber bei mir ganz vorne dabei, der swap-Operator:

    a :=: b;
    

    Wie würde man sowas machen, also ohne den Operator?



  • std::swap(a,b);

    ?



  • Frage_Swap schrieb:

    Sone schrieb:

    Aber bei mir ganz vorne dabei, der swap-Operator:

    a :=: b;
    

    Wie würde man sowas machen, also ohne den Operator?

    swap(a, b)
    


  • hmmmmmmmmmm schrieb:

    Also für strings, complex und chrono, richtig?

    🙂 👍

    Ja, make_unique ist auch ein nettes Goodie. Frage mich, wieso es kein make_unique in C++11 gibt...



  • Sone schrieb:

    Aber bei mir ganz vorne dabei, der swap-Operator:

    a :=: b;
    

    Auch überladbar in Klassen, etc. 🙂

    Dieser Blödsinn wurde zum Glück nicht angenommen. Hätte mich auch gewundert.

    Wenn schon für jeden Mist ein Operator, dann richtig:

    //move-Operator
    a ~= b;
    
    //begin und end Operatoren, weil die so lustig aussehen.
    std::begin(range) == :-) range
    std::end(range) == :-( range
    for (auto i = :-) range; i != :-( range; ++i)
    
    //switch-Operator: Endlich kann man switch-Statements in eine Zeile quetschen.
    int f(int a) {
      switch (a) {
        case 0: return 1;
        case 2: return 3;
        default: return 2;
      }
    }
    
    int f(int a) {
      return a ?? 0: 1 ?: 2: 3 ?: 2;
    }
    
    //Inkrementieren und Dekrementieren um zwei!
    int i = 0;
    i+++;
    assert(i == 2);
    
    //uniform initialization für enum
    enum e {
      a{0},
      b{1}
    };
    
    //geschweifte Klammern überladen
    struct S {
      static std::string operator {} () {
        return "jo";
      }
    };
    assert(S{} == "jo");
    

    Das alles ist nicht weniger sinnvoll als der Swapperator.



  • Ich fand die Idee zuerst auch bescheuert, zugegeben:

    Sone schrieb:

    Und swap-Operatoren hört sich ziemlich lustig, dennoch unnötig an.

    Ich habe immer noch dieselbe Meinung darüber - prinzipiell nur Syntaxzucker, nichts weiter. Trotzdem mag ich es und es hätte mich gefreut, würde es angenommen werden.

    TyRoXx schrieb:

    Das alles ist nicht weniger sinnvoll als der Swapperator.

    Doch. Einiges würde existierende Syntax in den Grundfesten erschüttern und ist darüber hinaus schlecht lesbar.
    Ich finde die derzeitige Syntax für einen Swap-Operator auch doof, zugegeben. Sieht auf die Dauer unlesbar aus. Da ist mir swap(a, b) lieber.



  • Sone schrieb:

    Ja, make_unique ist auch ein nettes Goodie. Frage mich, wieso es kein make_unique in C++11 gibt...

    Das hat Herb Sutter in einem Vortrag erwaehnt: Man hat es schlicht vergessen. Gleichzeitig hat er eine Implementation angegeben, trivial quasi.



  • constexpr wird endlich wirklich nützlich, wenn man in solchen Funktionen Statements benutzen darf.
    Angenehm ist auch, dass man Werte in Lambdas hineinbewegen kann. Das spart an manchen Stellen unnötige Kopien.
    Das VLA ist der letzte Sargnagel für C-Arrays. Jetzt kann man versehentlich eine Variable als Länge angeben. Wenn ich das richtig verstehe, können VLA-Definitionen std::bad_array_length werfen. Da nehme ich doch lieber array oder vector .



  • TyRoXx schrieb:

    Das VLA ist der letzte Sargnagel für C-Arrays. Jetzt kann man versehentlich eine Variable als Länge angeben.

    Warum sollte das schlecht sein?

    Wenn ich das richtig verstehe, können VLA-Definitionen std::bad_array_length werfen. Da nehme ich doch lieber array oder vector .

    Warum? VLAs liegen auf dem Stack, im Gegensatz zu array oder vector. Das ist groß-ar-tig. 0 overhead, automatisch augeräumt und unglaublich nützlich. Ich habe VLAs ab dem Moment vermisst, als ich reduce operatoren mit OpenMP implementieren wollte für die ich ein kleines array - größe anzahl der threads (dynamisch) brauche. std::array ist umständlich und std::vector spürbarer overhead.



  • Ich bin eher enttäuscht vom neuen Standard. Wenig wirklich neues, viele Notwendigkeiten endlich dabei.

    • Polymorphe Lambdas sind absolut hässlich, das auto muss weg.
    • Allocatoren werden mit inplace realloc endlich gefixt.
    • Das neue printf benutzt immer noch Typ-Spezifizierer.
    • std::convert ist nur ein Fix für die Symptome, keine Lösung.
    • std::nonowning_tr ist nutzlos, die Begründungen dafür BS.
    • Polymorphic Allocators: So hätte es von Anfang an sein sollen. Ein Allokator hat nicht Teil eines Typs zu sein.
    • Resumable functions: Na hoffentlich wird das von Compilern nicht über Context-Switching implementiert.

    Meine Meinung dazu.



  • Cyres schrieb:

    Frage_Swap schrieb:

    Wie würde man sowas machen, also ohne den Operator?

    swap(a, b)
    

    und noch ein using std::swap; davor, damit auf std::swap zurück gefallen werden kann, wenn es keine spezielle Version für einen bestimmten Typen gibt, die per ADL auffindbar ist.


Anmelden zum Antworten