Sind die Daten in std::array<std::array<T,N>, M>
garantiert zusammenhängend? Zum Beispiel:
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.
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.)
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.
Tags und Links c++ c++11 multidimensional-array