Heim >Backend-Entwicklung >C++ >Warum gibt GCC 4.6.1 einen Fehler aus, wenn ein „std::array' mit geschweiften Klammern initialisiert wird?

Warum gibt GCC 4.6.1 einen Fehler aus, wenn ein „std::array' mit geschweiften Klammern initialisiert wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 06:42:31592Durchsuche

Why does GCC 4.6.1 throw an error when initializing a `std::array` with braces?

std::array-Initialisierung mit geschweiften Klammern

In C gibt es zwei gängige Möglichkeiten, ein std::array mithilfe der Initialisierung zu erstellen Listen:

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

Wenn bei GCC 4.6.1 jedoch ein Kompilierungsfehler bezüglich „erwarteter Primärausdruck vor ‚,‘-Token“ auftritt, liegt dies an einer kleinen Besonderheit in std::array.

Im Gegensatz zu std::vector, das über einen Konstruktor verfügt, der explizit eine Initialisierungsliste akzeptiert, ist std::array als Struktur definiert:

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

Daher verfügt es nicht über eine Konstruktor, der eine Initialisierungsliste direkt akzeptiert. Stattdessen kann es mithilfe der Aggregatinitialisierung initialisiert werden.

Um ein Array innerhalb der std::array-Struktur korrekt aggregieren zu initialisieren, ist ein zusätzlicher Satz geschweifter Klammern erforderlich:

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

Das ist es Es ist erwähnenswert, dass der C-Standard vorschlägt, dass die zusätzlichen Klammern in diesem Szenario optional sein sollten. Daher handelt es sich bei dem bei GCC 4.6.1 aufgetretenen Kompilierungsfehler wahrscheinlich um einen Fehler im Compiler.

Das obige ist der detaillierte Inhalt vonWarum gibt GCC 4.6.1 einen Fehler aus, wenn ein „std::array' mit geschweiften Klammern initialisiert wird?. 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