Welche C++11 Features verwendet ihr häufig?



  • Nichts, außer zum Üben, da vom Chef verboten.



  • auto, lambdas, nullptr

    Edit:
    ging vergessen: range based for-loop



  • Och, ich bediene mich da hier und da Dingen, von denen ich weiß, dass die populären Compiler, die vor 2 Jahren aktuell waren, das schon konnten. Das ist so meine persönliche Schmerzgrenze. Wenn das Teil älter als 2 Jahre ist, kann ich erwarten, dass man sich 'ne aktuellere Version installiert.

    && (aber nicht als Ref-Qualifier)
    auto
    decltype
    -> (late-specified return type)
    static_assert
    std::enable_if und was sonst noch so in <type_traits> drin ist
    std::unique_ptr
    std::shared_ptr
    std::tuple
    std::unordered_map
    Lambdas

    Aber das kann ich mir auch erlauben, weil wir ein sehr kleines Team in einer Forschungseinrichtung sind, dessen Software hauptsächlich "in-house" genutzt wird. Die Hauptsache ist, dass man das für Windows und Linux kompiliert bekommt.



  • constexpr
    nullptr
    Variadic Templates
    Move-Semantics
    Lambdas
    override
    Delegating Constructors

    Manchmal auch decltype und auto.
    Edit: Und std::initializer_list (sehr praktisch)


  • Mod

    So ziemlich alles, da kann man auflisten:
    - inheriting / delegating ctors

    • nullptr , static_assert
      - alles aus allen Bibliotheksheadern, falls benötigt.
      - variadic templates, perfect forwarding mit URefs
      - Move-Semantik natürlich
      - Und das öfteste: auto als type-specifier, auch evt. decltype(auto) .
      - Selbstverständlich range-based for, das ist eine Augenweide.
      - Noch viel weiteres.

    Und was benutzt ihr aus C++1y?


  • Mod

    Singender Holzkübel schrieb:

    Und std::initializer_list (sehr praktisch)

    Wofür denn das?



  • Arcoth schrieb:

    Singender Holzkübel schrieb:

    Und std::initializer_list (sehr praktisch)

    Wofür denn das?

    ich vermute, damit er seine eigenen klassen wie aggregate initialisieren kann.



  • Arcoth schrieb:

    Singender Holzkübel schrieb:

    Und std::initializer_list (sehr praktisch)

    Wofür denn das?

    Diverse Initialisierungen.

    Arcoth schrieb:

    Und was benutzt ihr aus C++1y?

    constexpr 😉



  • Arcoth schrieb:

    Und was benutzt ihr aus C++1y?

    Nichts.

    Aber ich freue mich schon ein bisschen auf polymorphe Lambdas und Return-Type Deduction für "normale" Funktionen. Letzteres ist ja besonders für Template-lastigen Code interessant. Damit könnte ich mir hier z.B. die nervigen "->decltype(...)" sparen.



  • Singender Holzkübel schrieb:

    Arcoth schrieb:

    Und was benutzt ihr aus C++1y?

    constexpr 😉

    das gibt es schon in c++11.



  • Gibts da eigentlich irgendwo eine nette Übersicht für C++1Y Features?



  • asfdlol schrieb:

    Singender Holzkübel schrieb:

    Arcoth schrieb:

    Und was benutzt ihr aus C++1y?

    constexpr 😉

    das gibt es schon in c++11.

    Ja, aber nicht so!



  • Ich liste hier nur die am häufigsten benutzten C++11-Features auf.

    Sprache: Lambda-Ausdrücke, auto , Range-Based For, Move-Semantik, nullptr

    Bibliothek: function , unique_ptr



  • Lambda, move, forward, auto, range based for, sämtliche neuen Methoden von Containern sowie neue Algorithmen, unique_ptr, shared_ptr (eigentlich nur bei dem einen Projekt), nullptr.



  • nullptr ist einfach toll, lambdas und diverse neue Container-Funktionen. Der Rest taucht mal so hin und wieder auf, wenn ich merke dass man manche Dinge mit C++11 Features übersichtlicher/schneller/schöner/besser lösen kann.^^



  • Sprache: Move-Semantic, auto, variadic templates
    Library: unique_ptr, hashmaps

    Was ich nicht oder äusserst selten verwende:
    initializer_list, shared_ptr, foreach (wozu?), Encoding-Facetten.

    Was ich aus C++14 vermisse:
    Return-Type-Deduction, polymorphe Lambdas und Concepts.



  • fgbjaeh schrieb:

    Was ich nicht oder äusserst selten verwende:
    ... foreach (wozu?)

    Gibt's in C++ ja auch nicht



  • fgbjaeh schrieb:

    Concepts

    Achja. Das gibt's ja auch noch (irgendwann vielleicht mal).

    /me ist froh, dass "concepts" aus dem C++0x draft rausgeflogen ist und freut sich auf ein entschlacktes "concepts lite".



  • Ich nutze

    `auto

    nullptr,

    std::function

    std::unique_ptr

    std::shared_ptr

    `

    ich habe eine Frage bezüglich std::enable_if<Bool,T>

    Also wenn der Bool wahr ist, dann hat die Funktion ein Rückgabewert?

    also als beispiel:

    #ifndef _BEISPIEL_HPP
    #define _BEISPIEL_HPP
    
    #ifdef _NO_EXCEPTIONS
    #define _EXAMPLE_ true
    #else
    #define _EXAMPLE_ false
    #endif
    
    ...
    std::enable_if<_EXAMPLE_,DWORD>::type foo(parameters x)
    {
       //DO something
      if(/*ERROR*/)
          #ifdef _NO_EXCEPTIONS_
              return 3;
          #else
             throw "You made an ERROR";
          #endif
    
    return 0; // wird Ende der Funktion trotzdem ein return gemacht?
    }
    ...
    
    #endif
    

  • Mod

    Aber ich freue mich schon ein bisschen auf polymorphe Lambdas und Return-Type Deduction für "normale" Funktionen. Letzteres ist ja besonders für Template-lastigen Code interessant.

    Benutze ich beides laengst, den ich habe den neusten GCC- und Clang-Snapshot. Ich habe schon die Angewohnheit, gar keine Rueckgabetypen mehr hinzuschreiben, ausser, ich moechte noch implizit konvertieren. Ist ausserst angenehm, weil so die Redundanz aus dem Typsystem entfernt wird.

    Also wenn der Bool wahr ist, dann hat die Funktion ein Rückgabewert?

    Nein. Falls, und nur falls der bool den Wert true hat, dann hat die Spezialisierung einen Member mit Namen type - das ist ein Typedef auf das zweite Template-Argument. enable_if nutzt man fuer SFINAE, u.a. auch um Funktionen unter bestimten Bedingungen aus dem Overload-Set zu schmeissen. Wenn der bool den Wert false hat, dann ist der Ausdruck std::enable_if<....>::type fehlerhaft. Das ist der Trick. Seit C++11 kann man so etwas fuer Ausdruecke teilweise auch ohne enable_if , mit trailing-return-types und decltype .

    Kurz: Macht nur mit Templates Sinn.

    Falls du nur einen Compile-time Pruefung auf etwas machen willst, nimm

    static_assert( /*eine Bedingung */ false, "Fehlermeldung" );
    

Anmelden zum Antworten