Heim >Backend-Entwicklung >C++ >Wann sind äußere geschweifte Klammern in C-Initialisierungslisten für „std::array' und ähnliche Aggregate erforderlich?
Wenn äußere geschweifte Klammern in einer Initialisierungsliste nicht weggelassen werden können
In C sind äußere geschweifte Klammern für Initialisierungslisten erforderlich, wenn es um bestimmte Arten von geht Aggregatstrukturen, insbesondere solche, die Plain Old Datatypes (PODs) sind oder keine benutzerdefinierten Konstruktoren haben. Im Gegensatz zu den meisten Containern in der Standardbibliothek fällt std::array in diese Kategorie.
std::array-Initialisierung mit geschweiften Klammern
Betrachten Sie das folgende Beispiel:
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
wobei A eine Struktur mit zwei Datenelementen ist. Der zusätzliche Satz geschweifter Klammern, die {0, 0.1}, {2, 3.4} einschließen, ist wichtig, da er das interne Array von std::array initialisiert. Ohne sie meldet der Compiler den Fehler „zu viele Initialisierer“.
Direkte Array-Initialisierung
Dieses Verhalten ist analog zur direkten Array-Initialisierung:
Aarray a1 = { {0, 0.1}, {2, 3.4} };
Hier werden die internen Array-Daten der Aarray-Struktur direkt initialisiert. Ohne die äußeren Klammern würde der Compiler auf den gleichen Fehler stoßen wie bei std::array.
Vergleich mit Skalartypen
Beim Initialisieren von Arrays mit Skalartypen wie double, Äußere geschweifte Klammern sind optional, da Skalartypen keine Aggregate sind. Zum Beispiel:
std::array<double, 2> a2 = {0.1, 2.3};
In diesem Fall sind keine zusätzlichen geschweiften Klammern erforderlich, da das Datenelement des Arrays bereits direkt durch die Initialisierungsliste {0.1, 2.3} initialisiert wird.
Das obige ist der detaillierte Inhalt vonWann sind äußere geschweifte Klammern in C-Initialisierungslisten für „std::array' und ähnliche Aggregate erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!