C++ union 使用总结
以前写代码,很少使用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 使用总结相关推荐
- Python type hints 之 Optional,Union
1,前言 type hint 在pep484加入,我个人觉得这种类似于类型约束的(机制)有点违背了python简单.简洁的初衷,在慢慢向c# java 这种强类型语言看齐的节奏. 不过好在不强制使用, ...
- C++ 共用体union 的使用
共用体是什么 共用体将不同的数据类型组织为一个整体, 需要注意的是,共用体在同一时刻只能存储一个数据成员的值., 共用体变量的地址和它的格式成员的地址都是同一地址 共用体的一般形式 union 共用体 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 联合体union和大小端(big-endian、little-endian)
1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(s ...
- struct和union的大小问题
union类型以其中size最大的为其大小 struct类型以其中所有size大小之和为其大小 #include<iostream> using namespace std; int ma ...
- 利用c语言结构体和union实现类似c++的public,private的实现
最近在看strongswan源代码,看到strongswan的代码框架很有意思,用C语言实现类的思想.当我们编写完一个模块,我们需要提供的是H的文件给其他模块使用,我们希望H文件中就只能包含一些公有函 ...
- php union all,Union与Union All的区别
Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...
- mysql join union_MySQL中union和join语句使用区别的辨析教程
union和join是需要联合多张表时常见的关联词,具体概念我就不说了,想知道上网查就行,因为我也记不准确. 先说差别:union对两张表的操作是合并数据条数,等于是纵向的,要求是两张表字段必须是相同 ...
- C++/C union使用记一下锅
//首先,学习编程一定要记得加几个群或者加几个讨论组,因为这样你才能不断地进步还有吵架/滑稽 记一下 关于使用union结构体时遇到的一些坑 To zero-initialize an object ...
- 索引系列八--索引特性之有序难优化union
----UNION 是需要排序的 drop table t1 purge; create table t1 as select * from dba_objects where object_id i ...
最新文章
- 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)
- Linux学习笔记(三)|Vim编辑器
- redis hash数据类型常用命令
- 【CentOS7配置】如何设置:启动后自动获取网络连接、配置固定IP
- ssl提高组国庆模拟赛【2018.10.7】
- 信息学奥赛一本通(1134:合法C标识符查)
- pandas 学习 —— 逻辑表达式与布尔索引
- BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )
- 第五章 事务 视图 索引 备份和恢复
- python机器学习搭建空气质量AQI(air quality index)预测模型
- 美食网页设计作品html,美食网页设计与制作.doc
- 京东质检报告要求和检测项目-京东质检报告怎么弄
- 为windows server 2008 r2系统安装笔记本内置摄像头驱动的过程
- Photoshop制作印章效果
- RocKey4加密狗复制软件及教程
- 使用GO实现尚硅谷家庭记账系统
- 【CSS 遮挡和剪切属性 Masking】
- 计算机局域网的基本拓扑结构五种,计算机网络中局域网的拓扑结构有哪五种(图文)...
- 【压缩感知合集3】压缩感知的背景与意义
- Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)