cppreference系列> C++ language> Types> Union

union

  • 特殊的类类型,一次只能持有它的一个非static数据成员
  • 可以有成员函数,但是没有虚函数
  • 没有基类,也不能作为基类
  • 不能有引用类型的数据成员
  • 默认访问级别为public
  • 大小为最大数据成员的大小

 

匿名union

int main()
{
    union { int a; const char* p; };
    a = 1;
    p = "Jennifer";
}

union-like class

#include <iostream>
// S has one non-static data member (tag), three enumerator members, 
// and three variant members (c, n, d)
struct S
{
    enum {CHAR, INT, DOUBLE} tag;
    union {
        char c;
        int n;
        double d;
    };
};
 
void print_s(const S& s)
{
    switch(s.tag)
    {
        case S::CHAR: std::cout << s.c << '\n'; break;
        case S::INT: std::cout << s.n << '\n'; break;
        case S::DOUBLE: std::cout << s.d << '\n'; break;
    }
}
int main()
{
    S s = {S::CHAR, 'a'};
    print_s(s);
    s.tag = S::INT; s.n = 123;
    print_s(s);
}

 

posted on 2013-04-20 15:04  chenkkkabc  阅读(264)  评论(0编辑  收藏  举报