C++/C union使用记一下锅
//首先,学习编程一定要记得加几个群或者加几个讨论组,因为这样你才能不断地进步还有吵架/滑稽
记一下 关于使用union结构体时遇到的一些坑
To zero-initialize an object of type T means:
— if T is a scalar type (3.9), the object is set to the value of (zero) converted to T;
— if T is a non-union class type, each nonstatic data member and each base-class subobject is zeroinitialized;
— if T is a union type, the object’s first named data member89) is zero-initialized;
— if T is an array type, each element is zero-initialized;
— if T is a reference type, no initialization is performed.
To default-initialize an object of type T means:
— if T is a non-POD class type (clause ), the default constructor for T is called (and the initialization is
ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.
//这是C++标准里的截取的一小片段,加粗放大的那一句。
然后我就臆想了呀,关于如果声明一个局部变量union,第一个数据缺省初始化为 ”zero“(我感觉这么写比较好
但是万万没想到啊,用起来,union object zero initalize如果union object为全局变量,的确是结构体中的第一个变量为zero,但是,如果为局部变量的化就不一定了《编译器不同,数据也不同
也就是说标准给的这个不包括局部变量(block);
union 里面的元素默认为public类型,union没有constructor function 和 destructor function,因为这两个函数被delete。可以自己定义《鄙人认为现在的条件如果用到面向对象了,应该不会在乎这点内存吧,当然如果对象特别大的话《那我也不会union,我可以用指针啊,如果你说,我这个结构体中的几个变量,每次用的时候都会给初值,并且用的次数不多,那你用union吧,我反正不用。
//这就是构造和析构函数
union MYUNION{
char avs[];
char s[];
MYUNION(){
strcpy(avs,"abs");
}
~MYUNION(){
}
}a;
还是我在标准中标粗的那句话,第一个就是第一个,你别想着大的为零,下面看代码
union MYUNION{
char avs[];
char s[];
}a;
//这个 第一行初始为zero 也就是说他的一百个char 全是zero,后面的两个也是zero
//然后 换一下
union MYUNION{
char avs[2];
char s[100];
}a;
//这样就是第一行的两个字节被声明了zero,如果输后面的98个就不是zero了
这是一个比较坑的地方要注意。
在数据结构教程第五版 p184 页有提到过,广义表的实现也用到了union这个结构体《只能有一种存在,是这一种,另一种就不是了,这就说了我如果有一个对象,他有两个特性,一个是a,一个是b,我用了a就不能用b,用了b就不能用a,我还想省下一些内存。这样我可以将他封进class/struct中
typedef struct lnode{
int tag;
union{
int data;
struct lnode *sublist;
}val;
struct lnode *link;
}GYB;
union的总结也就到这儿了吧,写的有点乱,如果有哪位博友看到问题或者其他排版问题 /*欢迎评论和私聊*/
C++/C union使用记一下锅的更多相关文章
- 关于数据库的左,右,内,外连接,Union和Union all---------笔记
1.左连接 select a.filed1,a.filed2,b.filed1 from a (左表) left join b(右表) on a.commonfiled = b.commonfiled ...
- 记一个小bug的锅
人生中的第一个线上bug 我参与的第一个项目就出现了.但是自己还觉得这锅也不全是自己的,毕竟那么明显的bug出现在历史模块中(不是我写的新模块),难道测试部就没一点责任?代码走查人员就没一点责任?不过 ...
- 记一次mysql请求超时甩锅历程
今天下午业务找我说是线上环境一个mysql库很慢,请求出现了大量的超时,让帮忙看看,以下为查找过程及甩锅过程. 1. mysql请求超时,ok,我们所有线上mysql都是开启了慢查询日志的,查找慢查询 ...
- 记一次ssh配置的锅
我们在使用git来管理代码的时候不可避免的要用到ssh密匙,这个密匙怎么配置的百度上很多. 我这边是使用sourcetree来配合管理代码的,但是我ssh配置好了以后无论是克隆代码还是推送代码都提示我 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>
挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...
- SHOI2016游记&滚粗记&酱油记
Day0 学校刚期中考完,全科血崩,感觉这次真要考不到一本线了tat 晚上写了个可持久化trie的题,也懒得敲板子(上个礼拜都敲过了),就碎叫了 Day1 上午起床吃饭水群看球,吃完中饭就去考场了. ...
- union和union all的区别
UNION 写一篇联合查询(把前后两个表的查询结果集合在前表中)首先有个为什么需要 相同记录数?? 记错了.应该是union两张表的查询字段数目要一致,字段类型要相似相同的数据类型,至少是相似,可转化 ...
- gedit配置记
gedit配置记 起因 突然感觉sublime用用这里那里不方便(虽然很好看> >),然后稍微手调了一下gedit发现gedit还是非常可用的(雾)... 阶段一 我感觉sublime各种 ...
随机推荐
- Ubuntu 安装Consolas字体
下载 YaHei.Consolas https://code.google.com/p/uigroupcode/downloads/list 安装 1.创建文件夹 sudo mkdir -p /usr ...
- 自定义的Notification
要创建一个自定义的Notification,可以使用RemoteViews.要定义自己的扩展消息,首先要初始化一个RemoteViews对象,然后将它传递给Notification contentVi ...
- 并不对劲的spoj nsubstr
题意是求一个字符串每个长度的子串出现次数最多的那个出现了多少次,也就是求每个到根的最长路的right集合最大值 . 先建后缀自动机,然后将每个前缀所在的集合的初值设为1,因为所有前缀的right集合肯 ...
- UVA 10559 Blocks —— 区间DP
题目:https://www.luogu.org/problemnew/show/UVA10559 区间DP,有点难想: 为了方便,先把原来就是连续一段相同颜色的点看做一个点,记一下长度: f[i][ ...
- 30. extjs getEl方法 怎么用
转自:https://blog.csdn.net/evilcry2012/article/details/50586861 2014-10-27 11:57 提问者采纳 getEl = compo ...
- (博弈论)51NOD 1072 威佐夫游戏
有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...
- spring 简单实现BeanFactory(转)
原文地址: http://blog.csdn.net/mlc1218559742/article/details/52776160 有没有发现上面的代码与利用反射实现工厂模式的代码很相似.对,你没有看 ...
- Spring boot 分环境部署
一.如果配置文件为:application.properties时 1.application.properties用于填些公共文件 以下为不同环境的配置文件需要单独配置 application-de ...
- 2017杭电多校第六场1008 Kirinriki
传送门 Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 15 C#中的条件执行,if else
在这一节的练习中,给大家介绍C#编程中的一个重要部分,条件执行.也就是If else语句.我们现实生活中的很多复杂的推理都可以用这个语法实现. If else语句的常规的样子,如下面所示. if (测 ...