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