2013-11-15 40 views
2

我工作的C++: 以下是代码片段:为什么类的大小是1字节的union union成员?

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

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

我发现班级的大小“我”是1个字节。我不明白为什么值是1个字节? 任何人都可以解释我这个结果吗?

+1

可能是这将解释你的原因.. http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-object-of-an-empty -class – Dinesh

+0

你使用什么编译器? –

+0

@RichieHindle还是呢? – UldisK

回答

7

你的班级是空的,它包含两个工会类型声明,但没有数据成员。通常空类的大小不为零,如解释here

0

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

您还定义了联合类型,但您并未为其启动/分配空间。由于类媒体链接定义它没有零的大小,它是1个字节来检查,如果类中定义或不..

0

@RithchiHindle答案在同一链接仍然存在..

虽然你有2你的代码中的工会仍然还没有分配..即使在你创建了同一个类的对象并检查了大小之后,你将再次获得大小为1,因为内存没有被初始化为相同的..如果你已经创建了你的工会的一个例子,你会得到8个字节的大小

1

你会发现my::omy::f有一个适合其内容(通常4字节)的大小。但由于my::fmy::o实际上并不属于你的class,所以在课堂上只是声明,他们并没有占用课堂空间。

一个类似的例子将是:

类其他 { 的typedef炭MYTYPE [1024]; };

now,other::mytype将是1024字节长,但other仍不包含mytype的成员。