Wie kann ich mithilfe der Elementinitialisierungsliste ein Array initialisieren?

7
%Vor%

Stimmt das?

    
Josh Morrison 09.04.2011, 00:20
quelle

2 Antworten

19

Die einzige sinnvolle Sache, die Sie mit einem C-Array in C ++ 03 machen können, ist value-initialize (in C ++ 11 und darüber hinaus kann es list-initialisiert werden).

Aus dem Standard C ++ 03, §8.5 / 7:

  

Ein Objekt, dessen Initialisierer ein leerer Satz von Klammern ist, d. h., (,), wird mit Wert initialisiert.

Und aus §8.5 / 5:

  

Um value-initialize bedeutet ein Objekt vom Typ T :

     
  • Wenn T ein Klassentyp mit einem deklarierten Konstruktor ist, dann wird der Standardkonstruktor für T aufgerufen (und die Initialisierung ist fehlerhaft, wenn T keinen zugreifbaren Standardkonstruktor hat);
  •   
  • Wenn T ein Nicht-Union-Klassentyp ohne einen von einem Benutzer deklarierten Konstruktor ist, wird jeder nicht statische Datenmember und die Basisklassenkomponente von T value-initialisiert;
  •   
  • Wenn T ein Array-Typ ist, wird jedes Element initialisiert;
  •   
  • Andernfalls wird das Objekt initialisiert
  •   

Um Nullinitialisierung bedeutet ein Objekt vom Typ T :

     
  • Wenn T ein Skalartyp ist, wird das Objekt auf den Wert von 0 (null) gesetzt, konvertiert in T ;
  •   
  • Wenn T ein Nicht-Union-Klassentyp ist, wird jedes nicht statische Datenelement und jedes Basisklassen-Unterobjekt auf Null initialisiert;
  •   
  • wenn T ein Union-Typ ist, das erste benannte Datenelement des Objekts, ist null-initialisiert;
  •   
  • Wenn T ein Array-Typ ist, wird jedes Element auf Null initialisiert;
  •   
  • Wenn T ein Referenztyp ist, wird keine Initialisierung durchgeführt.
  •   

Wenn Ihre Konstruktordefinition in

geändert wird %Vor%

Dann ist garantiert, dass nach der Konstruktion alle 5 Elemente von A::a den Wert 'A::ptr' und %code% Null haben werden.

    
ildjarn 09.04.2011, 00:27
quelle
3

Angst nicht; C ++ unterstützt die Initialisierung solcher Arrays nicht.

Sie müssen nur seinen Mitgliedern im Konstruktorhauptteil von A zuweisen, oder Sie können value-initialization verwenden, wenn es Ihnen nicht wirklich wichtig ist, was die Werte sind:

%Vor%

C ++ 0x lässt Sie jedoch alle Werte angeben:

%Vor%

Beachten Sie jedoch, dass, weil Arrays nicht class-object s sind, dies nicht möglich ist:

%Vor%     
quelle

Tags und Links