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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值