一个union有一个或多个方法会有什么问题吗?还有需要注意的地方吗?(我可以看到构造函数/析构函数因为精神分裂症的原因可能会有问题)
来自C++03和C++0x(草案N3092)标准:
9.5 联合体
联合体可以有成员函数(包括构造函数和析构函数),但不能有虚函数(10.3)。联合体不应该有基类,也不应该用作基类。
使用聚合初始化语法(U u = { 42 };
)或之后设置成员(U u; u.i = 42;
)来初始化联合体并不“有问题”。使用构造函数(U u( 42 );
)初始化它也是可以的。
唯一的“限制”是你不能对具有用户定义构造函数的联合体使用聚合初始化语法。
你怎么可能实现这样的东西?这里有一个联合体指针,希望你不介意你不知道哪些变量是安全使用的。
联合体实际上已经成为了一种过时的语言特性 - 它们已经被像 boost::variant 或 boost::any 这样的基于库的方法完全取代。有点类似于 void* 和函数宏 - 在 C++ 中它们很少有用,相比其他选项。