C++联合体union用法实例详解

2020-01-06 13:13:54丽君

鉴于以上诸多麻烦(可能还有更多麻烦),在构造union时,编译器只负责分配空间,而不负责去执行附加的初始化工作,为了简化工作,只要我们提供了构造函数,就会收到上面的error。

同理,除了不能加构造函数,析构函数/拷贝构造函数/赋值运算符也是不可以加。

此外,如果我们的类中包含了任何virtual函数,编译时,我们将收到如下的错误信息:

error C2621: union '__unnamed' : member 'obj' has copy constructor

所以,打消在union中包含有构造函数/析构函数/拷贝构造函数/赋值运算符/虚函数的类成员变量的念头,老老实实用你的C风格struct吧!

不过,定义普通的成员函数是OK的,因为这不会使得class与C风格的struct有任何本质区别,你完全可以将这样的class理解为一个C风格的struct + n个全局函数。

现在,再看看在类中包含内部union时会有什么不同。看看下面的程序,并请注意阅读程序提示:

 

 
  1. class TestUnion  { 
  2.    union DataUnion     { 
  3.    DataUnion(const char*);     DataUnion(long); 
  4.    const char* ch_;     long l_; 
  5.    } data_;   
  6.   public:     TestUnion(const char* ch); 
  7.    TestUnion(long l);  }; 
  8.   TestUnion::TestUnion(const char* ch) : data_(ch) // if you want to use initialzing list to initiate a nested-union member, the union must not be anonymous and must have a constructor。 
  9. {}   
  10. TestUnion::TestUnion(long l) : data_(l)  {} 
  11.   TestUnion::DataUnion::DataUnion(const char* ch) : ch_(ch) 
  12. {}   
  13. TestUnion::DataUnion::DataUnion(long l) : l_(l)  {} 
  14.   int main (void) 
  15. {     return 0;