C 11 führte die std::array-Datenstruktur ein, die Arrays im C-Stil ähnelt, aber zusätzliche Funktionen wie Template- basierende Typspezifikation und Größenbestimmung zur Kompilierungszeit. Es stellt sich jedoch häufig die Frage: Führt die Deklaration eines std::array ohne explizite Initialisierung zu einer Standardinitialisierung für jedes Element?
Gemäß der C-Sprachspezifikation (§8.5/11) jedes Objekt ohne expliziten Initialisierer wird einer Standardinitialisierung unterzogen. Dazu gehören std::array-Objekte. Die Standardinitialisierung initialisiert Objekte von Nicht-Klassentypen, aber für Objekte von Klassentypen (was std::array ist) ruft sie den Standardkonstruktor auf.
In der cppreference-Dokumentation wird jedoch erwähnt, dass der Standardkonstruktor „default- erstellt oder kopiert jedes Element des Arrays. Dies bedeutet, dass std::array möglicherweise nicht die Standardinitialisierung für jedes Element durchführt.
Antwort:
Ja, standardmäßig wird ein std::array ohne explizite Initialisierung deklariert initialisiert standardmäßig alle Elemente gemäß der C 11-Spezifikation. Dieses Verhalten gilt sowohl für Arrays mit der Größe Null als auch mit Arrays ungleich Null.
Wertinitialisierung im Vergleich zur Standardinitialisierung:
Beachten Sie, dass die Wertinitialisierung (8.5/7) unterscheidet sich von der Standardinitialisierung. Die Wertinitialisierung weist Elementen den Standardwert ihrer jeweiligen Typen zu, der für primitive Typen normalerweise Null oder Falsch ist. Um die Wertinitialisierung explizit durchzuführen, kann man geschweifte Klammern mit einem leeren Initialisierer verwenden:
<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>
Dadurch werden alle Elemente explizit auf den Standardwert von int gesetzt, der 0 ist.
Das obige ist der detaillierte Inhalt vonIst std::array in C 11 standardmäßig initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!