2

我正在研究 C++:以下是代码片段:

class my
{
  union o
  {
    int i;
    unsigned int j;
  };

  union f
  {
    int a;
    unsigned int b;
  };
};

我发现“我的”类的大小是 1 个字节。我不明白为什么值为 1 字节?谁能解释一下这个结果?

4

4 回答 4

7

你的类是空的,它包含两个联合类型声明但没有数据成员。空类通常具有非零大小,如此处所述

于 2013-11-15T08:11:58.410 回答
1

您会发现它my::omy::f具有适合其内容的大小(通常为 4 个字节)。但是由于它们都不是my::f或者my::o实际上不是你的一部分class,只是在类中声明,它们没有占用类中的空间。

一个类似的例子是:

其他类 { typedef char mytype[1024]; };

现在,other::mytype将是 1024 字节长,但other仍不包含mytype.

于 2013-11-15T08:15:32.137 回答
0

联合是一种用户定义的数据或类类型,在任何给定时间,它只包含其成员列表中的一个对象。所以不要期望类为每个联合分配 8 个字节。

您还定义了联合类型,但您没有为它启动/分配空间。由于已经定义了类,因此它的大小不为零,因此检查类是否已定义是 1 个字节。

于 2013-11-15T08:13:32.673 回答
0

@RithchiHindle 答案仍然存在于同一个链接中。

尽管您的代码中有 2 个联合仍然尚未分配.. 即使在您创建了同一类的对象并检查大小之后,由于内存尚未初始化,您将再次将大小设为 1..如果您创建了联合的实例,那么您将获得 8 个字节的大小

于 2013-11-15T08:14:42.763 回答