以前写代码,很少使用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 使用总结相关推荐

  1. Python type hints 之 Optional,Union

    1,前言 type hint 在pep484加入,我个人觉得这种类似于类型约束的(机制)有点违背了python简单.简洁的初衷,在慢慢向c# java 这种强类型语言看齐的节奏. 不过好在不强制使用, ...

  2. C++ 共用体union 的使用

    共用体是什么 共用体将不同的数据类型组织为一个整体, 需要注意的是,共用体在同一时刻只能存储一个数据成员的值., 共用体变量的地址和它的格式成员的地址都是同一地址 共用体的一般形式 union 共用体 ...

  3. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  4. 联合体union和大小端(big-endian、little-endian)

    1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(s ...

  5. struct和union的大小问题

    union类型以其中size最大的为其大小 struct类型以其中所有size大小之和为其大小 #include<iostream> using namespace std; int ma ...

  6. 利用c语言结构体和union实现类似c++的public,private的实现

    最近在看strongswan源代码,看到strongswan的代码框架很有意思,用C语言实现类的思想.当我们编写完一个模块,我们需要提供的是H的文件给其他模块使用,我们希望H文件中就只能包含一些公有函 ...

  7. php union all,Union与Union All的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

  8. mysql join union_MySQL中union和join语句使用区别的辨析教程

    union和join是需要联合多张表时常见的关联词,具体概念我就不说了,想知道上网查就行,因为我也记不准确. 先说差别:union对两张表的操作是合并数据条数,等于是纵向的,要求是两张表字段必须是相同 ...

  9. C++/C union使用记一下锅

    //首先,学习编程一定要记得加几个群或者加几个讨论组,因为这样你才能不断地进步还有吵架/滑稽 记一下 关于使用union结构体时遇到的一些坑 To zero-initialize an object ...

  10. 索引系列八--索引特性之有序难优化union

    ----UNION 是需要排序的 drop table t1 purge; create table t1 as select * from dba_objects where object_id i ...

最新文章

  1. 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)
  2. Linux学习笔记(三)|Vim编辑器
  3. redis hash数据类型常用命令
  4. 【CentOS7配置】如何设置:启动后自动获取网络连接、配置固定IP
  5. ssl提高组国庆模拟赛【2018.10.7】
  6. 信息学奥赛一本通(1134:合法C标识符查)
  7. pandas 学习 —— 逻辑表达式与布尔索引
  8. BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )
  9. 第五章 事务 视图 索引 备份和恢复
  10. python机器学习搭建空气质量AQI(air quality index)预测模型
  11. 美食网页设计作品html,美食网页设计与制作.doc
  12. 京东质检报告要求和检测项目-京东质检报告怎么弄
  13. 为windows server 2008 r2系统安装笔记本内置摄像头驱动的过程
  14. Photoshop制作印章效果
  15. RocKey4加密狗复制软件及教程
  16. 使用GO实现尚硅谷家庭记账系统
  17. 【CSS 遮挡和剪切属性 Masking】
  18. 计算机局域网的基本拓扑结构五种,计算机网络中局域网的拓扑结构有哪五种(图文)...
  19. 【压缩感知合集3】压缩感知的背景与意义
  20. Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)

热门文章

  1. Cadence 16.6 安装记录
  2. 【 Vivado 】基本的时序约束、分析的概念
  3. 【 Notes 】Positioning system classification
  4. 【 C 】字符串函数专题
  5. 傅里叶分析中的时频域之间的关系(以及一点对于DFT的一点思考)
  6. Android自定义组合控件
  7. k8s源码架构目录分析
  8. 计算机科学中抽象的好处与问题—伪共享等实例分析
  9. CQRS及.NET中的参考资料
  10. CPU卡及其应用领域简介