new int[8]()
wird durch [dcl.init] /17.4 initialisiert. Da es ein Array ist, sagt [dcl.init] /8.3, dass der Wert, der ein Array initialisiert, bedeutet, jedes Element zu initialisieren.
new int[8]{}
wird, durch [dcl.init.list] /3.2, Aggregat Initialisierung auf dem Array aufrufen. Da in der stained-init-Liste keine Elemente vorhanden sind, wird jedes der verbleibenden Elemente im Array (dh alle 8) "aus einer leeren Initialisierungsliste" ([dcl.init.aggr]/8) initialisiert. Nachdem Sie wieder durch [dcl.init.list] getanzt haben, gelangen Sie zu 3.4, was Ihnen sagt, dass "von einer leeren Initialisierungsliste" für nicht-aggregierte Typen eine Wert-Initialisierung bedeutet.
Also ja, sie bewerten beide das gleiche.
Je mehr dieser Fragen ich lese, desto verwirrter werde ich, warum das Komitee jemals dachte, die Brace-Syntax sei eine gute Idee ... – Mehrdad
@Mehrdad: Also ... was, Sie würden es lieber nicht können initialisiere ein Array, das du mit Werten haufen lässt? –
@NicolBolas: Wann war das letzte Mal, dass du das tun musstest? Was hast du vor C++ 11 gemacht? – Mehrdad