2016-12-26 1 views
12

Ist new int[8]() äquivalent zu new int[8]{} in C++ 11?Ist "new int [8]()" äquivalent zu "new int [8] {}" in C++ 11?

Mit anderen Worten:

Ist die C++ 11 Standardgarantie jeweils new int[8]() und new int[8]{} gibt einen Null-initialisierte Array?

+0

Je mehr dieser Fragen ich lese, desto verwirrter werde ich, warum das Komitee jemals dachte, die Brace-Syntax sei eine gute Idee ... – Mehrdad

+1

@Mehrdad: Also ... was, Sie würden es lieber nicht können initialisiere ein Array, das du mit Werten haufen lässt? –

+0

@NicolBolas: Wann war das letzte Mal, dass du das tun musstest? Was hast du vor C++ 11 gemacht? – Mehrdad

Antwort

16

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.

Verwandte Themen