std::array<std::array<T,N>, M>
中的数据是否保证是连续的?例如:
#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);
}
断言可以保证成功吗?或者换一种说法,我可以依靠
Row
末尾没有填充吗?编辑:为了清楚起见,对于此示例,我希望整个矩阵的数据是连续的。
最佳答案
不,在这种情况下不能保证连续性。std::array
保证是一个聚合,并且以这样的方式指定:用于存储的基础数组必须是该类型的第一个数据成员。
但是,没有要求sizeof(array<T, N>) == sizeof(T) * N
,也没有要求在对象的末尾没有未命名的填充字节,或者std::array
除了底层数组存储之外没有其他数据成员。 (尽管如此,包含额外数据成员的实现充其量是不寻常的。)
关于c++ - 嵌套std::arrays中的数据是否保证是连续的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60883082/