C++ 14 - 联合 - 访问非活动成员是否合法?

C++ 14 - union - Is it legal to access inactive member?

提问人:Manuel Tonella 提问时间:11/10/2023 最后编辑:Manuel Tonella 更新时间:11/10/2023 访问量:103

问:

在阅读了很多关于它的信息后,我对从 C++14 开始访问工会的不活跃成员是否合法感到困惑。我知道这是 C++11 之前的未定义行为。

一些参考资料:

使用位域和联合的意外行为

使用工会的一个字段的地址访问另一个字段是否合法?

C++14 引入了以下语句:

“所有非静态数据成员将具有相同的地址”

(参考:https://en.cppreference.com/w/cpp/language/union)

使用这样的工会是可以接受的吗?


typedef union _BYTE_VAL_T
{
    unsigned char Val;
    struct
    {
        unsigned char b0:1;
        unsigned char b1:1;
        unsigned char b2:1;
        unsigned char b3:1;
        unsigned char b4:1;
        unsigned char b5:1;
        unsigned char b6:1;
        unsigned char b7:1;
    } bits;
} BYTE_BITS_T;


int main()
{
   BYTE_BITS_T reg;
   reg.bits.b5 = 0x1;
   std::cout << reg.Val; // use of inactive member
}
C++ C++14 联合 位域

评论


答: 暂无答案