N4567 的标准草案表明,如果根据12.1第4段,默认的默认构造函数被定义为已删除:
X是一个联合,其变体成员的所有都是const限定类型(或其数组),
换句话说,它等同于说,如果其变体成员之一不是const限定的,则上述规则不适用。我的问题是:
答案 0 :(得分:4)
假设你有一个只有const成员的联合:
union Foo {
const int x;
const double y;
}
默认构造函数必须决定要初始化哪些成员并成为活动成员。一旦创建,您就无法更改任何成员的值(它们都是const),因此您也无法更改哪个成员是活动成员。因此,这样的结构作为联合将是相当无用的。
另一方面,如果一个成员不是const:
union Bar {
int x;
const double y;
Bar() : y(10.0) {}
}
默认构造函数可能有意义,因为您以后仍可以通过
更改活动成员Bar b;
b.x = 10;