Heim >Backend-Entwicklung >C++ >Warum erfordern „std::vector' und „std::array' unterschiedliche Initialisierungssyntaxen?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-06 21:09:021105Durchsuche

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};

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

std::array<int, 4> y{{1,2,3,4}};

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 } };

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 };

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!

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