Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erfordern „std::vector' und „std::array' unterschiedliche Initialisierungssyntaxen?

Susan Sarandon
Freigeben: 2024-11-06 21:09:02
Original
999 Leute haben es durchsucht

Why Do `std::vector` and `std::array` Require Different Initialization Syntaxes?

Warum das abweichende Verhalten von std::Vector- und std::Array-Initialisierungslisten?

Bei der Initialisierung von Objekten beider std::vector und std::array-Datenstrukturen in C gibt es einen deutlichen Unterschied in ihrer Syntax. std::vectors können mit geschweiften Klammern initialisiert werden, wie in:

std::vector<int> x{1,2,3,4};
Nach dem Login kopieren

Bei std::arrays sind jedoch doppelte geschweifte Klammern erforderlich:

std::array<int, 4> y{{1,2,3,4}};
Nach dem Login kopieren

Der Grund denn diese Diskrepanz ergibt sich aus der zugrunde liegenden Natur dieser Datenstrukturen. std::arrays sind Aggregate – Objekte ohne benutzerdefinierte Konstruktoren oder auch nur einen, der explizit eine std::initializer_list annimmt.

Die Initialisierung mit geschweiften Klammern für std::arrays fällt daher unter Aggregatinitialisierung, geerbt von C. Bei der Aggregatinitialisierung wird der „alte Stil“ mit =: verwendet:

std::array<int, 4> y = { { 1, 2, 3, 4 } };
Nach dem Login kopieren

Diese Syntax ermöglicht die Eliminierung zusätzlicher Klammern in „einer Deklaration des Formulars“. T x = { a };". Diese Regel erstreckt sich jedoch nicht auf andere Formen der Listeninitialisierung, einschließlich der im zweiten Codeausschnitt verwendeten.

Ein CWG-Fehlerbericht (#1270) verdeutlicht diese Einschränkung. Sollte die vorgeschlagene Lösung angenommen werden, wird die Eliminierung von Klammern auf andere Listeninitialisierungsformen ausgeweitet, wodurch möglicherweise die folgende Syntax gültig wird:

std::array<int, 4> y{ 1, 2, 3, 4 };
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erfordern „std::vector' und „std::array' unterschiedliche Initialisierungssyntaxen?. 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!