Heim >Backend-Entwicklung >C++ >Warum fehlt std::array ein Konstruktor mit Wertinitialisierung?

Warum fehlt std::array ein Konstruktor mit Wertinitialisierung?

DDD
DDDOriginal
2024-10-23 17:59:03395Durchsuche

Why Does std::array Lack a Constructor with Value Initialization?

Warum hat std::array keinen Konstruktor mit Wertinitialisierung?

std::array ist eine Klasse, die einen festen Wert darstellt. Größe-Array, es fehlt jedoch ein Konstruktor, der einen Wert für alle seine Elemente annimmt. Das Fehlen eines solchen Konstruktors mag rätselhaft erscheinen, insbesondere wenn dynamische Container wie std::vector ähnliche Konstruktoren haben.

Diese Auslassung ist beabsichtigt, da std::array als Aggregattyp konzipiert ist. Aggregate in C sind Klassen, die ausschließlich aus Datenelementen bestehen und keine vom Benutzer deklarierten Konstruktoren haben. Daher kann std::array nur mit in Klammern eingeschlossenen Initialisierungslisten oder durch Kopieren/Verschieben-Konstruktion initialisiert werden.

Std::array bietet zwar eine Füllmethode zum Zuweisen von Werten zu allen Elementen, ist jedoch kein Ersatz für einen Konstruktor mit Wertinitialisierung. Die Füllmethode arbeitet mit einem bereits erstellten Array und initialisiert dessen Elemente, hat jedoch keinen Einfluss auf den Speicherstatus vor der Erstellung.

Wenn Sie alle Elemente eines std::array mit einem bestimmten Wert (-1) initialisieren müssen In Ihrem Beispiel können Sie die Standardkonstruktion gefolgt von „Füllung“ verwenden:

<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory)
myArray.fill(-1); // initialize all elements with -1</code>

Die Standardkonstruktion setzt den Speicher für Aggregate nicht auf Null, sodass die Füllmethode alle Elemente korrekt initialisiert, ohne dass auf Null gesetzte Werte überschrieben werden müssen. Beachten Sie, dass sich dieses Verhalten bei nicht trivial initialisierbaren Typen ändern kann.

Das obige ist der detaillierte Inhalt vonWarum fehlt std::array ein Konstruktor mit Wertinitialisierung?. 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