Ske*_*een 12 c++ pod unions discriminated-union c++11
C++ 11让我们可以在联合中使用非POD类型,比如说我有以下代码;
union
{
T one;
V two;
} uny;
Run Code Online (Sandbox Code Playgroud)
在我班级的某个地方,一次只有一名成员活跃,现在我的问题相当简单.
Ker*_* SB 14
你大多是靠自己.标准中的注释解释了这一点(9.5/2):
如果union的任何非静态数据成员具有非平凡的默认构造函数(12.1),复制构造函数(12.8),移动构造函数(12.8),复制赋值运算符(12.8),移动赋值运算符(12.8)或析构函数( 12.4),union的相应成员函数必须是用户提供的,否则将被隐式删除(8.4.3)union.
因此,如果任何成员构造函数都是非平凡的,则需要为union编写一个构造函数(如果它们都是微不足道的,则默认状态将是未初始化的,如同union { int; double; }).如果任何成员都有析构函数,则需要为union编写析构函数,该析构函数必须注意找出活动元素.
关于无约束联合的典型用法还有一个注释(9.5/4):
通常,必须使用显式析构函数调用和放置新运算符来更改联合的活动成员.
| 归档时间: |
|
| 查看次数: |
3579 次 |
| 最近记录: |