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