如果我们只有一个成员,结构体和联合体有什么区别吗?

36

如果有的话,我想了解在使用同一成员数据类型时,结构体和联合体之间的区别。


4
你可以通过在Google上进行简单的搜索来了解这件事情。 - user3522371
14
也许是这样,但关键点有些微妙,我可能不倾向于相信谷歌第一时间搜索出来的内容。 - Kerrek SB
2
关于POD和聚合体以及C++11的变化,可以参考什么是聚合体和POD,它们有什么特殊之处 - Richard Chambers
不妨移步程序员板块,而不是关闭? - wberry
1个回答

37
在C语言中,没有。著名的“节省空间的玩笑”#define struct union几乎不是一个玩笑。
在C++98中,联合体只能有POD成员,非联合类可以有任意成员。
在C++11中,联合体可以有任意对象类型的数据成员(但不能是引用类型),但它们的使用比非联合类更受限制。(即:联合体不能有虚拟成员函数,不能作为基类,也不能有基类。)此外,您需要编写更多的代码才能使单成员联合体工作,与单成员非联合类相比,因为您必须自己编写构造函数和析构函数。

1
一个实现中结构体可以有填充,但联合体不能有填充,对吗? - mafso
@mafso:我不这么认为。我唯一看到的限制是:“联合体的大小足以容纳其非静态数据成员中最大的一个。” - Kerrek SB
1
结构体的第一个成员之前不允许填充,而联合体和结构体末尾可能存在填充。因此,就单个成员的联合体和结构体而言,并没有区别。 - P.P
1
也许值得简短一句话的提及一下代码的可读性和可维护性(即在添加第二个成员时不会出错)。 - djechlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接