Heim > Backend-Entwicklung > C++ > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-08 12:18:02
Original
681 Leute haben es durchsucht

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!