Was ist der Typ der Initialisierungsliste in C ++ - Array?

8

Code wie dieser kann gut funktionieren:

%Vor%

Die linke Seite ist eine automatische Variable (Array).

Code wie dieser kann NICHT funktionieren:

%Vor%

Die linke Seite ist ein Zeiger. Der Zeiger zeigt auf einen unbekannten Raum, so dass dies fehlschlägt.

Meine Frage ist, was ist der Typ der rechten Seite?

In C ++ 11 wird eine Initialisierungsliste std::initializer_list . Aber was ist mit alter C ++ 03?

    
liuyanghejerry 16.05.2012, 08:30
quelle

4 Antworten

8

In C ++ 03 ist ein in Klammern eingeschlossener Initialisierer nur ein syntaktisches Gerät, mit dem Aggregate initialisiert werden können (z. B. Arrays oder bestimmte Arten von Klassen oder Strukturen). Es hat keinen "Typ" und kann nur für diese spezifischen Initialisierungsarten verwendet werden.

  

8.5.1 / 2 "Aggregate":

     

Wenn ein Aggregat initialisiert wird, kann der Initialisierer ein enthalten   Initialisierer-Klausel, bestehend aus einer Klammer eingeschlossen, durch Komma getrennt   Liste der Initialisierungsklauseln für die Mitglieder des Aggregats, geschrieben   in steigender Subskription oder Member-Reihenfolge.

    
Michael Burr 16.05.2012, 08:47
quelle
4

In C ++ 03 ist die rechte Seite eine Initialisierungsliste . Es hat keinen Typ, es dient lediglich dazu, Werte für Identifikatoren zu initialisieren.

Dies ist definiert in:

C ++ 03 8.5.1 Initialisierer [dcl.init]

  

Ein Deklarator kann einen Anfangswert für den deklarierten Bezeichner angeben. Der Identifizierer bezeichnet ein Objekt oder eine Referenz, die initialisiert werden. Der im Rest von 8.5 beschriebene Initialisierungsprozess gilt auch für Initialisierungen, die von anderen syntaktischen Kontexten spezifiziert werden, wie zB die Initialisierung von Funktionsparametern mit Argumentausdrücken (5.2.2) oder die Initialisierung von Rückgabewerten (6.6.3).

>
%Vor%     
Alok Save 16.05.2012 08:48
quelle
0

Aus dem Entwurf von C ++ 11:

  

8.5 Initialisierer

     

16 Die Semantik der Initialisierer ist wie folgt. Der Zieltyp ist   der Typ des Objekts oder der Referenz, die initialisiert werden, und die Quelle   type ist der Typ des Initialisierungsausdrucks. Der Quelltyp ist nicht   definiert, wenn der Initialisierer eine brained-init-Liste ist oder wenn es ein   eingeklammerte Liste von Ausdrücken.

    
dirkgently 16.05.2012 08:41
quelle
0
%Vor%     
samitha 01.07.2013 16:56
quelle

Tags und Links