C ++ 11 Dynamic Array Teillisteninitialisierung (Bug oder Missverständnis)?

9

Ich habe den folgenden C ++ 11 Code:

%Vor%

Ich dachte, ich würde verstehen, dass die Elemente 3 und 4 als Wert (in diesem Fall 0) initialisiert werden sollten. In Visual C ++ 2013 geschieht das. In Mingw 4.8.1 ist es nicht; Sie werden standardmäßig initialisiert (dh nicht initialisiert).

Meine Frage ist, ist das ein bekannter Compiler (GCC oder MingW) Bug? Ich habe vergeblich alle Buglisten durchsucht (und gegoogelt). Oder habe ich irgendwie missverstanden, was passieren soll?

    
user1663569 27.03.2015, 00:36
quelle

2 Antworten

1

Zunächst einmal, wenn Sie vermuten, dass ein Fehler vorliegt, können Sie ihn nicht melden. Hier ist ein Link zum GCC Bugzilla und deren Fehlerbericht-Anweisungen . Zumindest müssen Sie einen Testfall und das Betriebssystem und die Version Ihres Compilers bereitstellen. Es ist sehr wenig sinnvoll, SO zuerst an SO zu melden, da Sie hier alles über die Initialisierung lesen können > 1

Das richtige Verhalten ist, dass die verbleibenden Elemente auf 0 initialisiert werden. Zitieren des C ++ 11-Entwurfsstandards:

  

§5.3.4 / 15 Ein neuer Ausdruck , der ein Objekt vom Typ T erstellt   initialisiert das Objekt wie folgt: [...]

     
  • Andernfalls wird der new-initializer gemäß den Initialisierungsregeln von 8.5 für die direkte Initialisierung interpretiert.
  •   

§8.5.4 / 3 Listeninitialisierung eines Objekts oder einer Referenz vom Typ T ist   wie folgt definiert: [...]

     
  • Andernfalls, wenn T ein Aggregat ist, wird eine Aggregat-Initialisierung durchgeführt (8.5.1).
  •   

[...]

     
  • Andernfalls, wenn die Initialisierungsliste keine Elemente enthält, wird das Objekt initialisiert.
  •   

§8.5.1 / 7 Wenn es weniger Initialisierungsklauseln in der Liste gibt als   es gibt Mitglieder in der Gesamtheit, dann jedes Mitglied nicht explizit   initialisiert wird aus einer leeren Initialisierungsliste initialisiert   (8.5.4).

     

§8.5 / 5 To Nullinitialisierung Ein Objekt oder eine Referenz vom Typ T bedeutet:

     
  • Wenn T ein Skalartyp (3.9) ist, wird das Objekt auf den Wert 0 (null) gesetzt, der als Ausdruck der Integralkonstanten verwendet wird   T; 103 [...]
  •   

§8.5 / 7 Bis value-initialize bedeutet ein Objekt vom Typ T : [...]

     
  • Wenn T ein Array-Typ ist, wird jedes Element initialisiert;

  •   
  • andernfalls wird das Objekt initialisiert.

  •   

1 Ich habe einen Meta-Thread namens Brauchen wir eine kanonische Frage zur C ++ Initialisierung? , um den Mangel an vorheriger Forschung in Initialisierungsfragen zu adressieren.

    
user3920237 27.03.2015 02:01
quelle
0

Der Compiler wird das 3 und 4 Element mit 0 initialisieren.

in c ++ 11 wird dieser Ausdruck unterstützt.

Damit können Sie das Array (int oder char ...) wie folgt initialisieren: int a[10] = {0};

    
Alps1992 30.04.2015 08:00
quelle