Heim > Backend-Entwicklung > C++ > Wann sind äußere geschweifte Klammern in C-Initialisierungslisten für „std::array' und ähnliche Aggregate erforderlich?

Wann sind äußere geschweifte Klammern in C-Initialisierungslisten für „std::array' und ähnliche Aggregate erforderlich?

Susan Sarandon
Freigeben: 2024-12-05 03:17:18
Original
803 Leute haben es durchsucht

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

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}
};
Nach dem Login kopieren

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}
};
Nach dem Login kopieren

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};
Nach dem Login kopieren

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!

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