一个 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]
还是直接使用 "array" 的名称进行复制? - NathanOliverreinterpret_cast
,因为会违反严格别名规则。 - Danreinterpret_cast
。这有些不同... - Barry