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