Bei der Verwendung von Initialisierungslisten zum Initialisieren von Containern eine Möglicherweise ist Ihnen ein Unterschied in der Syntax zwischen std::vector und std::array aufgefallen. Während std::vector mit einfachen geschweiften Klammern {} initialisiert wird, erfordert std::array doppelte geschweifte Klammern {{}}. Um zu verstehen, warum dieser Unterschied besteht, befassen wir uns mit den grundlegenden Eigenschaften dieser Container.
Im Gegensatz zu std::vector std::array verfügt über benutzerdefinierte Konstruktoren und wird als Aggregattyp betrachtet. Dies bedeutet, dass es keine vom Benutzer deklarierten Konstruktoren gibt, einschließlich solcher, die Initialisierungslisten akzeptieren. Die Initialisierung von std::array basiert daher auf der Aggregatinitialisierung, einer von C geerbten C-Funktion.
In C , Die Aggregatinitialisierung kann auf zwei Arten durchgeführt werden:
Beim alten Stil konnten zusätzliche geschweifte Klammern bei der Initialisierung innerhalb einer Deklaration weggelassen werden. Diese Option ist jedoch für die direkte Listeninitialisierung nicht verfügbar.
Der CWG-Defekt Nr. 1270 versucht, diese Einschränkung zu beheben und ermöglicht das Eliminieren von Klammern in anderen Formen der Listeninitialisierung. Bei Genehmigung würde die folgende Syntax gültig:
std::array
Diese Änderung würde die aktuelle Ungleichheit in der Syntax zwischen std::vector und std::array beseitigen und für Konsistenz bei den aggregierten Initialisierungspraktiken sorgen.
Das obige ist der detaillierte Inhalt vonWarum verwenden „std::vector' und „std::array' unterschiedliche Syntax für Initialisierungslisten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!