以前写代码,很少使用union,所以在潜意识中,经常将其忽略。最近要写个生成一段数据的程序,数据类型有两种,一种保护的数据多些,另一种只包含第一种中的部分数据。因为潜意识中没有union,所以开始也没想到用union来实现。给同事讨论时,同事提示用union时,自己才想起来,C++中还有union。
依次为契机,就在网上查了些介绍union的资料,给自己补补课。下面总结了一下使用union的几个注意点,深层次的东西就不去探讨了。
1、共享内存
也就是共享起始地址。union变量中,可以包含union中的任何一个成员,但是该union变量的起始地址是固定的。
2、取最大成员的空间
既然union变量可以包含union中的任何一个成员,所以分配的空间必须确保能放得下最大的变量,这一点也比较容易理解。
3、成员类不可以有构造函数
此处就不对struct和class作区别了。为什么不能包含呢,此处借鉴了:http://tech.china.com/zh_cn/netschool/programme/c/656/20050811/12562605.html
中的思想。不过,本人还是想在此处再说一遍,也为了加深我的记忆。
为什么不允许成员类有构造函数呢,因为union也有难处,呵呵。如果成员有构造函数的话,在定义union(假设其中有类和基本类型的成员)变量的时候就不知道该不该去调用类的构造函数?如果调用了,而只使用了union中的基本类型的成员,显然构造函数的调用是多余的;如果没调,则类中的信息并没有初始化,如果使用,就会造成问题。还有,假如构造函数中分配了资源,在union变量被销毁的时候,也会去调用析构函数,释放资源?再假如,union中的多个类成员的构造函数中都分配了资源,union变量被销毁的时候,会分别调用每个成员析构函数,去释放资源么?
这样只会让union趋于无限复杂。
还有,包含构造函数/析构函数/拷贝构造函数/赋值运算符/虚函数的类成员,在union中都是不被允许的。
4、union可以有构造函数
个人觉得这可以算得上语言包容性的一个体现。union和struct、class一样,也是一种类型,既然是一种类型,就可以有构造函数,来构造该类型的对象。虽然这么做是允许的,但该做法并不被推荐。
分享到:
相关推荐
### C++中Union详解 #### 一、引言 在C++编程语言中,`union`作为一种特殊的数据结构,能够实现在同一块内存区域存储多种不同类型的数据,这对于内存管理及优化有着重要的意义。本文将详细介绍`union`的概念、特点...
【C语言、C++中的union用法总结】 在C和C++编程中,`union`是一种特殊的类型,它允许在相同内存位置存储不同类型的变量。理解`union`的关键在于了解其如何利用内存空间,以及如何在不同的数据类型之间切换。 **...
### C++基础知识总结 #### 一、名字空间 **1. 名字空间的定义** 名字空间是用来解决命名冲突的一种机制。在C++中,当多个开发者编写代码时,可能会出现相同的标识符名称,从而导致命名冲突。为了避免这种情况,...
以上是C++ Primer Plus中关于基础知识的总结,涵盖数据类型、内存管理、字符串处理、结构体、联合体、指针和表达式等多个方面。对于初学者来说,理解和掌握这些概念是学习C++的基础。在实际编程中,还需要结合实践...
16. **联合体`union`**:C++11放宽了对联合体的要求,允许非POD类型的成员存在,但需要显式地实现构造函数。 17. **`auto`的正确使用**: - 必须在定义时初始化。 - 可以与`const`和`volatile`结合使用。 - 不...
"C++ 知识点总结思维导图" C++ 是一种高性能的编程语言,具有面向对象、泛型编程、函数式编程等特点。本文将对 C++ 的知识点进行总结,涵盖了基础语法、类与对象、面向对象、信号处理、预处理、模板命名空间、动态...
(使用C++,不建议用伪码) #include using namespace std; void main() { char a[50];memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=...
### C++总结(总结+实例) #### 一. 概述 C++ 是一种静态数据类型检查的、支持多种编程范式的通用程序设计语言。它支持过程化编程、数据抽象、面向对象编程、泛型编程等多种编程风格。C++ 的发展历程可以大致分为三...
《C/C++面试基础知识总结》 C/C++是两种强大的编程语言,它们在软件开发领域有着广泛的应用。面试时,了解这些语言的基础知识是至关重要的。以下是对C/C++面试基础知识的详细解释: 1. **const和static作用**:`...
在C和C++编程中,理解并掌握全局变量、指针、联合体(Union)、静态变量以及二维数组等概念是至关重要的。以下是对这些知识点的详细解释: 1. **全局变量和指针**: 全局变量在程序的整个生命周期内都存在,其作用...
### C++基础知识总结 #### 目录概览 本文档主要涵盖了C++语言的基础知识及其在实际开发中的应用,特别适合于C++的初学者。文档由多个章节组成,包括了C/C++语言特性、面向对象编程基础、内存管理、标准模板库(STL...
首先,联合(union)是C++中一种特殊的结构体,它允许在相同内存空间内存储不同类型的数据。联合的成员共享同一块内存,这意味着当你更改其中一个成员的值时,其他成员的值也会受到影响。虽然联合可以拥有成员函数,...
位域研究总结 位域(Bit-fields)是 C 语言和 C++ 语言中都有的一个概念,但是位域有很多需要注意的问题。其中一个重要的问题是大端和小端字节序的问题。 大端和小端字节序是计算机科学中的一种约定,用于描述多...
"51CTO总结的C++经典面试题和答案" 本资源为C++经典面试题和答案大全,涵盖了C++的多方面知识点,包括变量的作用域、全局变量和局部变量、static关键字的使用、循环语句、函数和变量的存储方式等。以下是对该资源的...
C++允许在结构体(struct)和联合体(union)中定义成员函数,这使得它们类似类(class)的功能,可以拥有方法。 2. **内联函数**: 内联函数通过`inline`关键字声明,用于优化频繁调用且规模较小的成员函数。这样做是...
### C++ STL库函数总结(侧重ACM竞赛) #### 集合(Set) 集合是C++标准模板库(STL)中的一个重要容器,它基于红黑树实现,具有高效的查询、插入和删除性能。集合中的元素不会重复,并且默认情况下按照元素的自然顺序...
1. 变量与数据类型:C++中的基本数据类型包括整型(int)、浮点型(float、double)、字符型(char)等,还有自定义的数据类型——结构体(struct)和联合体(union)。 2. 控制结构:包括条件语句(if-else,switch...
- **C++程序的编写和实现**:指导读者如何使用编辑器编写程序,以及如何使用编译器进行编译和运行程序。 - **C++上机实践**:提供了实际操作指南,帮助初学者熟悉C++编程环境。 ##### 2. 数据类型与表达式 - **...