Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verwenden „std::vector“ und „std::array“ unterschiedliche Syntax für Initialisierungslisten?

Warum verwenden „std::vector“ und „std::array“ unterschiedliche Syntax für Initialisierungslisten?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 12:18:02679Durchsuche

Why do `std::vector` and `std::array` use different syntax for initializer lists?

Verstehen des unterschiedlichen Verhaltens von Initializer_list für std::vector und std::array

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.

std::array: Ein Aggregat

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.

Aggregatinitialisierung in C

In C , Die Aggregatinitialisierung kann auf zwei Arten durchgeführt werden:

  1. Alter Stil: Unter Verwendung der =:-Syntax, z. B. std::array y = {{1, 2, 3, 4}};
  2. Direkte Listeninitialisierung: Direkte Übergabe einer Initialisierungsliste, z. B. std::array y{1, 2, 3, 4};

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.

Eine bevorstehende Änderung

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 y{1, 2, 3, 4};

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn