我收到了一些规范和头文件,定义了一些用于项目的结构。对于像容器一样使用的结构使用了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;
};
谢谢大家。
答案 0 :(得分:4)
在最后一个结构中使用
union
关键字是否会使struct standardPayload
中定义的字段占用相同的空间,就像它被定义为这样?
没有。由于standardPayload
不是union
,因此在此处无效。
我猜测standardPayload
曾经是union
,并且在过去的某个时间更改为struct
。将变量声明为union X
类似于在C中声明变量struct X
。
在C ++中,显然不需要使用任何一个,并且typedef enum
(代码顶部)也不是 - 表示此代码实际上是C头而不是C ++的一部分。