Welche Ausgabe erwartet ihr?



  • Skym0sh0 schrieb:

    In beiden (d.h. 4) Fällen sollte durch Uniform initialization jeweils ein Vector mit 5 Elementen die 3 sind erzeugt werden. Aber was kommt raus?

    Wieso? std::vector hat einen Konstruktor, der eine std::initializer_list annimmt (siehe http://en.cppreference.com/w/cpp/container/vector/vector).
    Verstehe ich vielleicht nicht was du suggerieren möchtest?

    M.M.n. ist es eine Sauerei die Uniform Initialization für Konstruktoraufrufe von non-POD-Typen zu verwenden weil das Verhalten vom Code davon abhängig ist, ob ein std::initializer_list -Konstruktor definiert ist.


  • Mod

    Blurrys Frage lautete: "Welche Ausgabe erwartet ihr?"

    Ja, aber es ist klar dass er die Ausgabe nicht verstanden hat. Folglich braucht er eine Erklärung. Ich glaube kaum dass es ihm weiterhilft wenn wir ihm einfach sagen dass wir 12 erwarten. Ich denke du bist in diesem Forum um zu helfen, dann müsstest du auch wissen dass man nicht immer akribisch genau nur die Fragen beantwortet die der TE auch explizit hinschreibt.



  • Interessante Sichtweise.
    Bei vielen anderen Postings, wo die Frage weniger klar formuliert ist, das Ansinnen des TE aber recht deutlich herausgelesen werden kann, lese ich oft Antworten wie:

    "Meine Glaskugel ist gerade zur Reparatur".

    Hier stellt nun mal einer eine klare Frage, da versuche ich nicht, irgendetwas anderes hineinzuinterpretieren.


  • Mod

    "Meine Glaskugel ist gerade zur Reparatur".

    Das sagen wir wenn der Code oder der Fehler (bzw. die Fehlermeldung) nicht gepostet wurde, Dinge die wir nicht erraten können.



  • Statist schrieb:

    M.M.n. ist es eine Sauerei die Uniform Initialization für Konstruktoraufrufe von non-POD-Typen zu verwenden weil das Verhalten vom Code davon abhängig ist, ob ein std::initializer_list -Konstruktor definiert ist.

    Ich würde sagen, dass es bad practise ist, sowohl einen std::initializer_list -Konstruktor anzubuieten als auch einen Konstruktor mit zwei Argumenten vom selben Typ.



  • Skym0sh0 schrieb:

    Ja? Uniform Initialization ist dafür da, dass alle Initialisierungen gleich aussehen.

    Da hab ich es einfacher. Bei mir sind sie dazu da, Container initial zu befüllen.



  • volkard schrieb:

    Skym0sh0 schrieb:

    Ja? Uniform Initialization ist dafür da, dass alle Initialisierungen gleich aussehen.

    Da hab ich es einfacher. Bei mir sind sie dazu da, Container initial zu befüllen.

    Da du mich ja eh immer berichtigst, dann mach es wenigstens auch hier.
    Hab ich Uniform Initialization falsch verstanden, oder wie?

    Oder ists wieder einer deiner Trollposts und du meinst eigentlich Initializer Lists?



  • volkard schrieb:

    Skym0sh0 schrieb:

    Ja? Uniform Initialization ist dafür da, dass alle Initialisierungen gleich aussehen.

    Da hab ich es einfacher. Bei mir sind sie dazu da, Container initial zu befüllen.

    So handhabe ich das auch. 👍



  • Volkard meint, er verwendet etwas, was wie ein Konstruktoraufruf aussieht

    std::vector< int > foo( 2, 0 );
    

    wenn er klarstellen will, daß kein Konstruktor aufgerufen wird, der eine initializer-list nimmt.

    Er würde also nie-nicht etwas schreiben wie

    for( unsigned i{}; i < MAX; ++i );
    

    .
    😃


  • Mod

    Bei mir sind sie dazu da, Container initial zu befüllen.

    Und was ist mit Aggregat-Initialisierungen?



  • Swordfish schrieb:

    Er würde also nie-nicht etwas schreiben wie

    for( unsigned i{}; i < MAX; ++i );
    

    .
    😃

    Genau!

    Überlegen muss ich mir noch

    auto main(void) -> int {
    	…
    	return {};
    }
    


  • Arcoth schrieb:

    Bei mir sind sie dazu da, Container initial zu befüllen.

    Und was ist mit Aggregat-Initialisierungen?

    Ja, es gibt Ausnahmen.

    Nach Möglichkeit wünsche ich mir für structs auch normale Konstruktoren.

    Ich nenne mal

    static YesType Check(SizeToType<sizeof(U{})>*);
    

    in
    http://www.c-plusplus.net/forum/327733



  • volkard schrieb:

    Überlegen muss ich mir noch

    auto main() -> int {
    	…
    	return {};
    }
    

    Och, das ist doch ganz einfach:

    #include <cstdlib>
    
    auto main() -> decltype( EXIT_SUCCESS )
    {
    	return  decltype( EXIT_SUCCESS )();
    }
    

Anmelden zum Antworten