我工作的C++: 以下是代码片段:为什么类的大小是1字节的union union成员?
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
我发现班级的大小“我”是1个字节。我不明白为什么值是1个字节? 任何人都可以解释我这个结果吗?
我工作的C++: 以下是代码片段:为什么类的大小是1字节的union union成员?
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
我发现班级的大小“我”是1个字节。我不明白为什么值是1个字节? 任何人都可以解释我这个结果吗?
你的班级是空的,它包含两个工会类型声明,但没有数据成员。通常空类的大小不为零,如解释here
联合是一种用户定义的数据或类类型,在任何给定时间,其成员列表中只包含一个对象。所以不要期望从课程中为每个工会分配8个字节。
您还定义了联合类型,但您并未为其启动/分配空间。由于类媒体链接定义它没有零的大小,它是1个字节来检查,如果类中定义或不..
@RithchiHindle答案在同一链接仍然存在..
虽然你有2你的代码中的工会仍然还没有分配..即使在你创建了同一个类的对象并检查了大小之后,你将再次获得大小为1,因为内存没有被初始化为相同的..如果你已经创建了你的工会的一个例子,你会得到8个字节的大小
你会发现my::o
和my::f
有一个适合其内容(通常4字节)的大小。但由于my::f
或my::o
实际上并不属于你的class
,所以在课堂上只是声明,他们并没有占用课堂空间。
一个类似的例子将是:
类其他 { 的typedef炭MYTYPE [1024]; };
now,other::mytype
将是1024字节长,但other
仍不包含mytype
的成员。
可能是这将解释你的原因.. http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-object-of-an-empty -class – Dinesh
你使用什么编译器? –
@RichieHindle还是呢? – UldisK