正如上面程序所示,C++中的union也可以包含构造函数,但是,这虽然被语言所支持,但实在是一种不佳的编程习惯,因此, 我不打算对上面的程序进行过多的说明。我更推荐如下的编程风格:
- class TestUnion {
- union DataUnion {
- const char* ch_; long l_;
- } data_;
- public: TestUnion(const char* ch);
- TestUnion(long l); };
- TestUnion::TestUnion(const char* ch)
- { data_.ch_ = ch;
- }
- TestUnion::TestUnion(long l) {
- data_.l_ = l; }
- int main (void)
- { return 0;
- }
它完全是C风格的。
所以,接受这个结论吧:
请按照C中的convention去使用union,尽量不要尝试使用任何C++附加特性。
union是个好东西,union是个struct,里面所有成员共享一块内存,大小由size最大的member决定,存取成员的时候会以成员的类型来解析这块内存;在gamedev中,union可以在这些方面有所作为:
1. 换名:
- struct Rename {
- public: union
- { struct
- { float x,y,z,w;
- }; struct
- { float vec[4];










