Sind die Daten in verschachtelten std :: arrays garantiert zusammenhängend?

8

Sind die Daten in std::array<std::array<T,N>, M> garantiert zusammenhängend? Zum Beispiel:

%Vor%

Ist die Behauptung garantiert erfolgreich? Oder, um es anders auszudrücken, kann ich mich darauf verlassen, dass am Ende von Row ? Kein Padding vorhanden ist?

BEARBEITEN: Nur um klar zu sein, für dieses Beispiel möchte ich, dass die Daten der gesamten Matrix zusammenhängend sind.

    
Emile Cormier 18.03.2012, 21:54
quelle

2 Antworten

10

Nein, die Kontiguität ist in diesem Fall nicht gewährleistet.

std::array ist garantiert ein Aggregat und wird so angegeben, dass das zugrunde liegende Array, das für den Speicher verwendet wird, das erste Datenelement des Typs sein muss.

Allerdings ist weder sizeof(array<T, N>) == sizeof(T) * N erforderlich, noch ist es erforderlich, dass am Ende des Objekts keine unbenannten Füllbytes vorhanden sind oder dass std::array keine anderen Datenelemente als den zugrunde liegenden Arrayspeicher hat. (Eine Implementierung mit zusätzlichen Datenelementen wäre bestenfalls ungewöhnlich.)

    
James McNellis 18.03.2012, 22:01
quelle
5

Sie sind sehr wahrscheinlich zusammenhängend. Ist dies nicht der Fall, kämpft der Compiler dort aktiv gegen Sie. Es gibt keine Garantie, dass kein Padding eingefügt wird, aber es gibt kaum einen Grund dafür.

  

Ist die Behauptung garantiert erfolgreich?

data[7] ist ein Out-of-Bounds-Zugriff (undefiniertes Verhalten). Das innere Array-Objekt hat nur sieben Elemente, so dass Index 7 nicht gültig ist.

    
R. Martinho Fernandes 18.03.2012 22:01
quelle