Direct vs. Copy Initialization



  • Habe mir gestern ein Video von Ncolai Josuttis angesehen und darin sagt er, dass direct initialization der richtige Weg sei, um Objekte jeder Art heutzutage zu initialisieren.

    also statt:

    int a = 5;
    
    int a{5};
    

    bzw. für custom objects statt

    Widget w = 5 ;  // converting ctor vorausgesetzt
    Widget w = Widget{5};
    

    lieber

    Widget w{5};
    

    das habe ich auch häufig so gemacht, allerdings ist ja seit C++17 copy elision mandatory und daher dürfte es doch keinen Unterschied machen oder?

    Vor allem bei Initialisierung durch function calls wird dieser Syntax ja irgendwie awkward

    Widget w{foo()};
    

    oder aber wenn auto verwendet wird

    auto s{5};

    wie ist der richtige Weg hier?

    Almost always auto kann ja sowohl direct initialization als auch copy initialization...



  • @sewing sagte in Direct vs. Copy Initialization:

    wie ist der richtige Weg hier?

    Gibt es den richtigen Weg dafür? Insgesamt ist das wohl eher eine Frage von Meinungen und Gewohnheiten als von handfesten Gründen.



  • @manni66 sagte in Direct vs. Copy Initialization:

    Insgesamt ist das wohl eher eine Frage von Meinungen und Gewohnheiten als von handfesten Gründen.

    Auch wenn es so gesehen eher nicht eine Frage von handfesten Gründen ist (eher nicht kann zwar auch gar nicht sein, muss es aber nicht), kann man diese trotzdem suchen.

    Wird bei der copy-initialization zuerst temporär das Objekt angelegt und der Konstruktor ausgeführt und dann kopiert? Wird bei der direct-initialization nur der Konstruktor ausgeführt? Wenn ja, wäre dann direct-initialization vermutlich effizienter?



  • aber seit 17 ist ja copy elision verpflichtend für die compiler