【发布时间】:2019-02-03 15:18:34
【问题描述】:
以下 C++ 代码无法编译。据我研究过这个问题,我知道问题是因为联合的默认构造函数已被编译器删除。在线说明如下:
如果联合包含具有非平凡默认构造函数的非静态数据成员,则默认删除联合的默认构造函数,除非联合的变体成员具有默认成员初始值设定项。
struct A {
int val;
A() : val(0) {}
};
union B
{
A a;
};
B b;
为什么结构 A 的默认构造函数被认为是不平凡的?如何解决此问题以使此代码成功编译?
【问题讨论】:
-
我在发布这个问题之前看过这篇文章。但是,很抱歉,我无法真正理解如何解决此问题。
-
@Spinkoo 也许有细微差别。这个问题问“有什么问题”。那个人问“为什么存在这条规则”
-
是的,我也想知道解决上述问题的最简单方法(如果有的话)是什么。
-
我不确定这个修复是否是最简单和最正确的,但尝试像这样在联合内部声明 A a();而不是 A a
标签: c++ c++11 constructor compiler-errors unions