В C++11 std::array определяется как непрерывное хранилище и производительность не хуже, чем у массива, но я не могу решить, подразумевают ли различные требования стандарта, что std:: массив имеет тот же размер и расположение памяти, что и обычный массив. То есть можете ли вы рассчитывать на sizeof(std::array) == sizeof(int)*N или это специфичная реализация?
В частности, гарантированно ли это будет работать так, как вы ожидаете:
Код: Выделить всё
std::vector< std::array > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// use y like normal multidimensional array
Он работает в двух компиляторах, которые я пробовал (GNU и Intel). Более того, во всей сторонней документации, которую я смог найти (например, здесь), говорится, что std::array столь же эффективен по использованию памяти, как и простой массив, что в сочетании с требованием непрерывности означает, что он должен иметь идентичную структуру памяти. Однако я не могу найти это требование в стандарте.
Подробнее здесь:
https://stackoverflow.com/questions/191 ... y-standard