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
Susan SarandonOriginal
2024-12-05 03:17:18793Durchsuche

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

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!

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