В С++ 11 std::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 и Intel). Более того, все сторонние документы, которые я мог найти (как это), заявляют, что std:: array как память эффективен как простой массив, который в сочетании с смежным требование подразумевало бы, что он должен иметь идентичный макет памяти. Однако я не могу найти это требование в стандарте.