Heim > Backend-Entwicklung > C++ > Hauptteil

Ist std::array in C 11 standardmäßig initialisiert?

Linda Hamilton
Freigeben: 2024-10-30 11:47:02
Original
923 Leute haben es durchsucht

Is std::array Default-Initialized in C  11?

Standardinitialisierung von std::array

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!