nas*_*ass -1 c++ struct sizeof
我有这个c ++结构:
struct Packet
{
uint32 MessageCount;
uint32 Length;
uint32 FieldValue;
union PacketHeader
{
uint32 typeInfo;
struct MagicVersion
{
uint8 MagicNumber[3];
uint8 Version;
};
};
Data * Payload(void) { return reinterpret_cast< Data * >(this + 1U); }
Data const * Payload(void) const { return reinterpret_cast< Data const * >(this + 1U); }
Packet * nextPacket(void) { return reinterpret_cast< Packet * >(this + 1U) + Length; }
Packet const * nextPacket(void) const { return reinterpret_cast< Packet const * >(this + 1U) + Length; }
};
Run Code Online (Sandbox Code Playgroud)
然后sizeof(Packet)在MSVC++中返回12而不是16,这是我所期望的.
奇怪的是,这比预期值小.如果它更大可能是因为对齐问题.
我错过了什么?
TIA
Dut*_*tow 10
为什么你认为它应该更大?
它包含3个uint32没有虚拟方法,正好是12个字节.
联合不计,因为它是一个类型,它不包含该类型的成员.
如果您希望您的类包含union的单个实例,其中包含结构的单个实例,您应该写:
struct Packet
{
uint32 MessageCount;
uint32 Length;
uint32 FieldValue;
union
{
uint32 typeInfo;
struct
{
uint8 MagicNumber[3];
uint8 Version;
} /* MagicVersion */;
};
} /* PacketHeader */;
Run Code Online (Sandbox Code Playgroud)
其中的名称/**/是可选的,您可以指定它们.如果你这样做,你必须使用union/ 的名称访问他们的成员struct,否则你将有一个扁平的Packet结构.