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

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

正如上面程序所示,C++中的union也可以包含构造函数,但是,这虽然被语言所支持,但实在是一种不佳的编程习惯,因此, 我不打算对上面的程序进行过多的说明。我更推荐如下的编程风格:

 

 
  1. class TestUnion  { 
  2.    union DataUnion     { 
  3.    const char* ch_;     long l_; 
  4.    } data_;     
  5.   public:     TestUnion(const char* ch); 
  6.    TestUnion(long l);  }; 
  7.   TestUnion::TestUnion(const char* ch) 
  8. {     data_.ch_ = ch; 
  9. }   
  10. TestUnion::TestUnion(long l)  { 
  11.    data_.l_ = l;  } 
  12.   int main (void) 
  13. {     return 0; 

它完全是C风格的。

所以,接受这个结论吧:

请按照C中的convention去使用union,尽量不要尝试使用任何C++附加特性。

union是个好东西,union是个struct,里面所有成员共享一块内存,大小由size最大的member决定,存取成员的时候会以成员的类型来解析这块内存;在gamedev中,union可以在这些方面有所作为:

1. 换名:

 

 
  1. struct Rename  { 
  2. public:  union 
  3. {  struct 
  4. {  float x,y,z,w; 
  5. };  struct 
  6. {  float vec[4];