您的位置:首页 > 编程语言 > C语言/C++

C++中union成员变量的特殊说明

2014-04-02 17:44 387 查看
原帖地址:http://blog.csdn.net/ocean2006/article/details/5789352

项目中遇到一个关于union成员变量的问题:当union包含具有构造函数(notrival构造函数)的成员变量时编译器无法编译通过,错误提示为“成员*具有用户定义的构造函数或不常用的默认构造函数”。仔细看了下C++ primer和相关网页的介绍,这是一个涉及union成员变量知识点。

C++中不适合做union成员变量的情形有以下几种:

1、类或结构体中含有nontrival的构造函数(拷贝构造函数)、析构函数、拷贝赋值操作符、虚函数等;

2、类的基类和成员变量中含有1中所述几个函数

3、静态变量

4、变量引用

以上几种情形不适合作为union成员变量,这一点可以由union的定义解释。union成员在内存里面并行存放共享内存区域,大小是union最大数据成员所占的内存空间。在编译时期程序必须知道union各个数据成员所需的内存空间,所以具有构造函数的类型和静态的数据变量不能用在union中。对于情形1,union成员变量中拥有多个构造函数,构造函数执行的顺序就是个大问题,因为后面执行的构造函数或许会覆盖前面执行的效果!更近一步的,如果前面一个构造函数执行了很多重要的操作,但是后面一个构造函数被执行了,并且是在同一片内存区域上执行,就会导致前面的状态丢失,使得程序处于不一致状态,因此编译器就理所当然的禁止了这种行为。静态变量存储在内存全局区,更不可能出现在union中。变量引用指向的变量size尺寸也可能不确定,与union定义冲突。

C中struct可以放心的出现在union中,但是C++中的struct与class没有区别,用在union中时需要注意上述四种情形。当然,结构和类中定义普通的成员函数是没有任何问题的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c c++
相关文章推荐