为什么类的大小是1字节的联盟成员?

时间:2013-11-15 08:03:08

标签: c++ class unions

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

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

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

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

4 个答案:

答案 0 :(得分:7)

您的类为空,它包含两个联合类型声明但没有数据成员。正如here

所解释的那样,空类通常具有非零大小

答案 1 :(得分:1)

您会发现my::omy::f的大小适合其内容(通常为4个字节)。但由于my::fmy::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个字节的大小