„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum kann GCC std::array nicht mit Initialisierungslisten initialisieren?

Warum kann GCC std::array nicht mit Initialisierungslisten initialisieren?

Veröffentlicht am 19.11.2024
Durchsuche:915

Why Does GCC Fail to Initialize std::array with Initialization Lists?

Initialisierungslisten und std::array: Ein GCC-Fehler

Die std::array-Klasse in der C-Standardbibliothek bietet eine feste- Größe des Array-Containers. Es wird allgemein angenommen, dass diese Klasse Initialisierungslisten unterstützt.

Bei Verwendung von GCC 4.6.1 schlagen jedoch Versuche, std::array-Instanzen mit der folgenden Syntax zu initialisieren, fehl:

std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });

Trotz Initialisierungslisten, die mit std::vector arbeiten, ist dieses Verhalten mit std::array aufgetreten Fragen zum C-Standard oder einem potenziellen GCC-Problem.

Das Innenleben von std::array

std::array ist im Wesentlichen eine Struktur, die ein Array kapselt. Seine Struktur ähnelt:

template
struct std::array {
  T a[size];
};

Im Gegensatz zu std::vector, das über einen Konstruktor verfügt, der Initialisierungslisten akzeptiert, fehlt std::array ein solcher Konstruktor.

Aggregatinitialisierung

Obwohl std::array keinen expliziten Konstruktor für Initialisierungslisten hat, wird er in C 11 als Aggregattyp betrachtet. Daher kann er aggregiert initialisiert werden. Um das Array innerhalb der Struktur zu initialisieren, ist jedoch ein zusätzlicher Satz geschweifter Klammern erforderlich:

std::array<:string> strings = {{ "a", "b" }};

Potenzieller GCC-Fehler

Der C-Standard erlaubt das Weglassen der zusätzlichen geschweiften Klammern bei einer solchen Initialisierung. Daher ist es wahrscheinlich, dass die Unfähigkeit von GCC, diese Syntax ohne sie zu verarbeiten, ein Fehler ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3