Heim > Backend-Entwicklung > C++ > Garantiert „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?

Garantiert „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?

Susan Sarandon
Freigeben: 2024-11-23 06:06:21
Original
1056 Leute haben es durchsucht

Does `std::array` Guarantee the Same Size and Memory Layout as a Regular C   Array?

Garantierte Semantik für std::array-Größe und Speicherlayout

In C 11 bietet std::array zusammenhängenden Speicher und eine Leistung, die mit vergleichbar ist reguläre Arrays. Die Anforderungen des Standards für std::array werfen jedoch die Frage auf: Hat es unbedingt die gleiche Größe und das gleiche Speicherlayout wie ein entsprechendes Array?

Gemäß §23.3.2.1/2 des C-Standards ist std: :array ist ein Aggregat, das mithilfe einer Initialisierungsliste initialisiert wird. Da Aggregate keine Konstruktoren zum Konvertieren von Daten verwenden können, muss die Initialisierungsliste die im Array gespeicherten Werte direkt darstellen.

Dies impliziert, dass die Größe von std::array durch die Anzahl der darin angegebenen Elemente bestimmt werden muss Vorlagenargument. Darüber hinaus sollte das Speicherlayout mit dem eines Arrays identisch sein, ohne Hilfsdaten oder Auffüllungen.

Obwohl der Standard diese Anforderung nicht explizit angibt, wird sie durch die aggregierte Natur von std::array stark impliziert und das Mandat für zusammenhängende Speicherung.

Das bedeutet, dass sizeof(std::array) tatsächlich gleich sizeof(int) * N sein sollte, um sicherzustellen dass die in der ursprünglichen Anfrage angegebenen Beispiele wie beabsichtigt funktionieren.

In der Praxis halten sich Compiler und Implementierungen normalerweise an dieses erwartete Verhalten. Es ist jedoch wichtig zu beachten, dass der Standard dies nicht strikt durchsetzt, sodass die Möglichkeit nicht konformer Implementierungen offen bleibt.

Das obige ist der detaillierte Inhalt vonGarantiert „std::array' die gleiche Größe und das gleiche Speicherlayout wie ein normales C-Array?. 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