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
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!