Heim > Backend-Entwicklung > C++ > Warum kann GCC std::array nicht mit Initialisierungslisten initialisieren?

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

Linda Hamilton
Freigeben: 2024-10-29 04:41:02
Original
706 Leute haben es durchsucht

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.

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

<code class="cpp">std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });</code>
Nach dem Login kopieren

Trotz Initialisierungslisten Bei der Arbeit mit std::vector hat dieses Verhalten mit std::array Fragen zum C-Standard oder einem möglichen GCC-Problem aufgeworfen.

Das Innenleben von std::array

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

<code class="cpp">template<typename T, int size>
struct std::array {
  T a[size];
};</code>
Nach dem Login kopieren

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:

<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
Nach dem Login kopieren

Potenzieller GCC-Fehler

Der C-Standard erlaubt das Weglassen von die 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.

Das obige ist der detaillierte Inhalt vonWarum kann GCC std::array nicht mit Initialisierungslisten initialisieren?. 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