Tob*_*ndt 6 c++ strict-aliasing unions
是否可以在联合中共享两个数组,如下所示:
struct
{
union
{
float m_V[Height * Length];
float m_M[Height] [Length];
} m_U;
};
Run Code Online (Sandbox Code Playgroud)
这两个阵列共享相同的内存大小还是其中一个更长?
隐式保证它们在内存中的大小相同。不允许编译器在 2D 数组或 1D 数组中的任何位置插入填充,因为所有内容都必须与sizeof.
[当然,如果您写入m_V和读取m_M(反之亦然),您仍然会进行类型双关,这在技术上会调用未定义的行为。但这是另一回事。]