Является ли базовое представление бит для std::array<T,N> v
и a T u[N]
тем же?
Другими словами, безопасно ли скопировать N*sizeof(T)
байты от одного к другому? (Либо через reinterpret_cast
, либо memcpy
.)
Edit:
Для пояснения акцент делается на том же представлении бит и 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));