我正在研究C ++: 以下是代码段:
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
我发现类“my”的大小是1个字节。我不明白为什么值是1个字节? 任何人都能解释一下这个结果吗?
答案 0 :(得分:7)
您的类为空,它包含两个联合类型声明但没有数据成员。正如here
所解释的那样,空类通常具有非零大小答案 1 :(得分:1)
您会发现my::o
和my::f
的大小适合其内容(通常为4个字节)。但由于my::f
或my::o
实际上都不是class
的一部分,只是在课堂上宣布,它们并没有在课堂上占用空间。
类似的例子是:
等等 { typedef char mytype [1024]; };现在,other::mytype
长度为1024字节,但other
仍然不包含mytype
的成员。
答案 2 :(得分:0)
union是用户定义的数据或类类型,在任何给定时间,它只包含其成员列表中的一个对象。所以不要期望从类中为每个联合分配8个字节。
您还定义了联合类型,但您没有为它启动/分配空间。由于class已定义为allready,因此它的大小为no-zero,检查是否定义了类是1字节。
答案 3 :(得分:0)
@RithchiHindle答案仍然存在于同一个链接中..
虽然你的代码中仍然有2个联合仍未分配..即使你创建了同一个类的对象并检查了大小,你也会再次将大小设置为1,因为内存未被初始化相同..如果您创建了一个联合实例,那么您将获得8个字节的大小