在 C++11std::array
中被定义为具有不比数组差的连续存储和性能,但我无法确定标准的各种要求是否意味着 std::array 具有与正常相同的大小和内存布局大批。那是您可以指望sizeof(std::array<int,N>) == sizeof(int)*N
还是该实现特定于?
特别是,这是否保证按您期望的方式工作:
std::vector< std::array<int, N> > x(M);
typedef (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// use y like normal multidimensional array
它适用于我尝试过的两个编译器(GNU 和英特尔)。此外,我能找到的所有第 3 方文档(像这样)都指出 std::array 与普通数组一样具有内存效率,结合连续要求意味着它必须具有相同的内存布局。但是我在标准中找不到这个要求。