Одинаково ли базовое битовое представление для std::array<T,N> v
и T u[N]
?
Другими словами, безопасно ли копировать N*sizeof(T)
байта из одного в другой? (Либо через reinterpret_cast
, либо через memcpy
.)
Изменить:
Для пояснения, акцент делается на одном представлении битов и reinterpret_cast
.
Например, предположим, что у меня есть эти два класса для некоторого тривиально копируемого типа T
для некоторого N
:
struct VecNew {
std::array<T,N> v;
};
struct VecOld {
T v[N];
};
И есть устаревшая функция
T foo(const VecOld& x);
Если представления совпадают, то этот вызов безопасен и позволяет избежать копирования:
VecNew x;
foo(reinterpret_cast<const VecOld&>(x));
data
/&array_name[0]
или используя имя самого массива? - person NathanOliver   schedule 07.09.2016reinterpret_cast
, из-за строгого алиасинга. - person Dan   schedule 07.09.2016reinterpret_cast
-инге. Это несколько другое... - person Barry   schedule 08.09.2016VecNew
, например, добавляя новое поле, и наслаждайтесь отладкой. Спасибо, не надо. - person Slava   schedule 08.09.2016