以下C ++代码编译失败。至于我已经看过了这个问题,据我所知,这个问题是因为工会的默认构造函数已经被编译器中删除。在线笔记说以下内容:
如果工会包含一个不平凡的默认构造函数的非静态数据成员,工会的默认构造函数在默认情况下删除,除非工会的变体成员都有一个默认的成员初始化。
struct A {
int val;
A() : val(0) {}
};
union B
{
A a;
};
B b;
为什么一个结构的默认构造函数认为是不平凡?如何解决这个问题,使这个代码编译成功?
为什么一个结构的默认构造函数认为是不平凡?
因为它是用户声明。
该做的类实例有一个简单的构造函数:
struct Trivial {
int val;
};
struct Trivial2 {
int val;
Trivial2() = default;
};
作为奖励,这是不平凡的:
struct NonTrivial {
int val;
NonTrivial();
};
NonTrivial::NonTrivial = default;
如果你想A::val
要然而零初始化,你要默认成员初始化器添加到工会:
union B {
A a = {};
};