C++中并集中的两个数组

Two arrays in a union in C++

本文关键字:两个 数组 集中 C++      更新时间:2023-10-16

是否可以在这样的联合中共享两个数组:

struct
    {
        union
        {
            float m_V[Height * Length];
            float m_M[Height] [Length];
        } m_U;
    };

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

两个数组都需要具有相同的大小和布局。当然如果使用m_V初始化任何内容,则对m_M的所有访问都是未定义行为;例如,编译器可能会注意到m_V已更改,并返回一个较早的值,即使您通过CCD_ 4对元素进行了修改。我实际上使用了一个编译器在遥远的过去这样做了。I避免访问联合不可见,例如通过传递对m_V的引用和对CCD_ 6具有相同的功能。

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

[当然,如果你向m_V写入并从m_M读取(反之亦然),你仍然是类型punning,这在技术上调用了未定义的行为。但那是另一回事。]