c++11中的union

c++11中union除了继承c语言的数据共享内存之外,行为上越来越像一个类,比如成员默认是public类型。c++11中的新特性:
1、能够有成员函数,包括构造函数和析构函数

union U //C++11
{
    int a;
    int b;
    char* p;
    U() : a(5) {} //ctor with mem init
    U(U&& r) { p=r.p; r.p=0;} //move ctor
    U&& operator=(U&& r) 
    { p=r.p; r.p=0; return *this;} //move assignment op
    ~U() {delete [] p; } //dtor
}

2、不能继承,也不能被继承,也不能有虚函数

class P{};
union U: P {}; //compilation error
class C : public U{}; //also a compilation error
union U //C++11
{
    int a;
    int b;
    char* p;
    virtual ~U() {delete [] p; } //compilation error, virtual
};

3、可以有成员变量是类,但是这个类成员不能有自己定义的构造、拷贝、析构、赋值等函数,否则编译不过(至少在vs2012上是的)
自己定义的构造、拷贝、析构、赋值函数称为non-trivial函数,默认的则称为trivial函数,相关内容参考链接3和4

4、不能有引用成员,不管是左值引用还是右值引用,不能有静态成员变量,但是可以有静态成员函数

union U
{
    int & r; //compilation error
    double && rr; //also a compilation error
};
union U
{
    int a;
    static void func(){}
};

5、在类的内部使用union,整个类包装联合体

class C 
{
     union //anonymous union
     { 
        int a;
        char* p; 
     };
};

参考链接:
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=556
http://bbs.csdn.net/topics/80436802
http://www.freezhongzi.info/?p=147
http://bbs.csdn.net/topics/110162419

发布了38 篇原创文章 · 获赞 27 · 访问量 18万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章