C++中联合中的两个数组

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)

这两个阵列共享相同的内存大小还是其中一个更长?

Oli*_*rth 1

隐式保证它们在内存中的大小相同。不允许编译器在 2D 数组或 1D 数组中的任何位置插入填充,因为所有内容都必须与sizeof.

[当然,如果您写入m_V和读取m_M(反之亦然),您仍然会进行类型双关,这在技术上会调用未定义的行为。但这是另一回事。]