¿Están garantizados los datos en std::array<std::array<T,N>, M>
contiguos? Por ejemplo:¿Se garantiza que los datos en std :: matrices anidados son contiguos?
#include <array>
#include <cassert>
int main()
{
enum {M=4, N=7};
typedef std::array<char,N> Row;
typedef std::array<Row, M> Matrix;
Matrix a;
a[1][0] = 42;
const char* data = a[0].data();
/* 8th element of 1D data array should be the same as
1st element of second row. */
assert(data[7] == 42);
}
¿Se garantiza que la afirmación tendrá éxito? O, para decirlo de otra manera, ¿puedo confiar en que no haya relleno al final de un ?
EDIT: Para que quede claro, para este ejemplo, quiero que los datos de la matriz de toda a ser contiguas.
Incluso si el almacenamiento es contiguo, creo que no cumpliría las reglas de aliasing. Vea esta pregunta que hice hace muchas lunas (sobre C, ciertamente): http://stackoverflow.com/questions/6290956/one-dimensional-access-to-a-multidimensional-array-well-defined-c. –
posible duplicado de [¿Es la memoria en std :: array contiguo?] (Http://stackoverflow.com/questions/6632915/is-the-memory-in-stdarray-contiguous) por recursión –
@LightnessRacesinOrbit: No, I no creo que sea un duplicado Si bien los datos en un único 'std :: array' son contiguos, eso no implica que todo el conjunto de datos en' std :: array's anidados sea contiguo. O al menos no es obvio para un abogado que no sea de idiomas como yo. –