【问题标题】:Is there any difference between structure and union if we have only one member?如果我们只有一个成员,结构和联合之间有什么区别吗?
【发布时间】:2014-12-21 17:43:31
【问题描述】:

如果有的话,我想知道一种成员数据类型的结构和联合之间的区别。

【问题讨论】:

  • 您可以通过在 Google 上进行简单搜索自行阅读。
  • @Begueradj:也许吧,但问题有点微妙,我可能不倾向于相信 Google 向我抛出的第一件事。
  • 关于 POD 和聚合以及对 C++11 更改的额外讨论,请参阅 What are aggregates and PODs and how are they special
  • 不要关闭,也许会转到程序员?

标签: c++ c c++11 struct unions


【解决方案1】:

在 C 中:无。著名的“节省空间笑话”#define struct union 几乎不是笑话。

在 C++98 中:联合只能有 POD members,非联合类可以有任意成员。

在 C++11 中:联合可以有任意对象类型的数据成员(但不是引用类型),但它们的使用比非联合类更受限制。 (即:联合不能有虚拟成员函数,不能是基类,也不能有基类。)此外,与单成员非联合类相比,您必须编写更多代码才能使单成员联合工作, 因为你必须自己编写构造函数和析构函数。

【讨论】:

  • 实现是否允许在结构中使用填充,但不允许在联合中使用?
  • @mafso:我不这么认为。我看到的唯一限制是:“联合的大小足以包含其最大的非静态数据成员。”
  • 在结构的第一个成员之前不允许填充,并且在联合和结构的末尾可能有填充。因此,就单个成员 union 与 struct 而言,没有区别。
  • 也许值得一提一下可读性和可维护性(即添加成员 #2 时不会中断)。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2017-04-05
相关资源
最近更新 更多