添加'加入'关于预定义结构的关键字

时间:2014-05-07 16:57:45

标签: c++ struct

我收到了一些规范和头文件,定义了一些用于项目的结构。对于像容器一样使用的结构使用了union我以为我以前没见过。下面显示的是与结构定义方式类似的设置:

typedef enum PayloadType
{
    PAYLOAD_A,
    PAYLOAD_B
};
struct A_Payload
{
    bool boolPayload;
};

struct B_Payload
{
    char messagePayload[MAX_STRING_SIZE];
};
struct standardPayload
{
    A_Payload aPayload;
    B_Payload bPayload;
};
struct containerPayload
{
    PayloadType type;
    union standardPayload stPayload;  // g++ doesn't like this
                                      // require -fpermissive to compile
};

在最后一个结构中使用union关键字是否会使struct standardPayload中定义的字段占用相同的空间,就像它被定义为这样?哪种方式是正确的或可接受的,如果有的话?

union struct standardPayload
{
    A_Payload aPayload;
    B_Payload bPayload;
};

谢谢大家。

1 个答案:

答案 0 :(得分:4)

  

在最后一个结构中使用union关键字是否会使struct standardPayload中定义的字段占用相同的空间,就像它被定义为这样?

没有。由于standardPayload不是union,因此在此处无效。

我猜测standardPayload曾经是union,并且在过去的某个时间更改为struct。将变量声明为union X类似于在C中声明变量struct X

在C ++中,显然不需要使用任何一个,并且typedef enum(代码顶部)也不是 - 表示此代码实际上是C头而不是C ++的一部分。