C++中union成员变量的特殊说明
来源:互联网 发布:互动宣泄仪软件 编辑:程序博客网 时间:2024/06/04 18:26
原帖地址: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++中union成员变量的特殊说明
- C++中union成员变量的特殊说明
- 类中特殊成员变量的初始化
- 类中特殊成员变量的初始化
- 类中特殊成员变量的初始化
- Linux下Shell中特殊变量$!,$?,$@,$#,$*的变量说明
- 特殊成员变量的初始化
- C++中特殊的成员变量的初始化方法
- c++中静态成员变量的两个特殊属性
- C++类中特殊成员变量的初始化方式
- c++类中特殊数据类型成员变量的初始化
- 常成员变量的说明
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系(转)
- UML与软件开发生命周期
- 直接插入排序
- android 电容屏(一):电容屏基本原理篇
- 23种设计模式之python实现--Prototype模式
- C++中union成员变量的特殊说明
- MFC消息机制简析
- AGENT时区问题
- Linux下查看Nginx Apache MySQL的并发连接数和连接状态
- Oracle中插入大量测试数据
- autotools 使用流程
- java内存分析
- 【大话设计模式——学习笔记(3)】单一责任原则
- vc++6.0生成exe文件不能在非VC环境下应用 (