//首先,学习编程一定要记得加几个群或者加几个讨论组,因为这样你才能不断地进步还有吵架/滑稽

记一下 关于使用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使用记一下锅的更多相关文章

  1. 关于数据库的左,右,内,外连接,Union和Union all---------笔记

    1.左连接 select a.filed1,a.filed2,b.filed1 from a (左表) left join b(右表) on a.commonfiled = b.commonfiled ...

  2. 记一个小bug的锅

    人生中的第一个线上bug 我参与的第一个项目就出现了.但是自己还觉得这锅也不全是自己的,毕竟那么明显的bug出现在历史模块中(不是我写的新模块),难道测试部就没一点责任?代码走查人员就没一点责任?不过 ...

  3. 记一次mysql请求超时甩锅历程

    今天下午业务找我说是线上环境一个mysql库很慢,请求出现了大量的超时,让帮忙看看,以下为查找过程及甩锅过程. 1. mysql请求超时,ok,我们所有线上mysql都是开启了慢查询日志的,查找慢查询 ...

  4. 记一次ssh配置的锅

    我们在使用git来管理代码的时候不可避免的要用到ssh密匙,这个密匙怎么配置的百度上很多. 我这边是使用sourcetree来配合管理代码的,但是我ssh配置好了以后无论是克隆代码还是推送代码都提示我 ...

  5. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  6. CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>

    挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...

  7. SHOI2016游记&滚粗记&酱油记

    Day0 学校刚期中考完,全科血崩,感觉这次真要考不到一本线了tat 晚上写了个可持久化trie的题,也懒得敲板子(上个礼拜都敲过了),就碎叫了 Day1 上午起床吃饭水群看球,吃完中饭就去考场了. ...

  8. union和union all的区别

    UNION 写一篇联合查询(把前后两个表的查询结果集合在前表中)首先有个为什么需要 相同记录数?? 记错了.应该是union两张表的查询字段数目要一致,字段类型要相似相同的数据类型,至少是相似,可转化 ...

  9. gedit配置记

    gedit配置记 起因 突然感觉sublime用用这里那里不方便(虽然很好看> >),然后稍微手调了一下gedit发现gedit还是非常可用的(雾)... 阶段一 我感觉sublime各种 ...

随机推荐

  1. css3 3d特效汇总

    本篇全是实战,没有基础,如果不明白3d特效的原理,可能会看不懂,不过没关系,给你推荐一下 张鑫旭css3 3d转换,或者看我的另一篇博客  css3 2d转换3d转换以及动画的知识点汇总,看完这些3d ...

  2. LAMP安装问题【已解决】

    1.编译不通过提示cannot find mysql header files under /usr/local/mysql解决办法:修改./configuer  --with-mysql=/usr/ ...

  3. TQ210--UBOOT移植笔记--添加自己的单板【学习笔记】

    在uboot的源码的根目录下的readme中有介绍如何在uboot中添加自己的单板: 一.在boards.cfg中添加自己的单板的信息,可以模仿smdkc100去添加自己的单板的信息 二.复制单板的配 ...

  4. POJ 1330 LCA裸题~

    POJ 1330 Description A rooted tree is a well-known data structure in computer science and engineerin ...

  5. codeforces 965E Trie+multiset

    E. Short Code time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. 百度上传组件 WebUploader

    WebUploader http://fex.baidu.com/webuploader/doc/index.html WebUploader API 文档详细解读 源码以及示例:https://gi ...

  7. 浙江省CIO协会钱塘江论坛近日在网易云创沙龙宣布成立

    本文来自网易云社区 9月19日,由网易云与浙江省首席信息官协会共同主办的“网易云创CIO沙龙”在杭州举行,本次活动以“瞩目钱塘,赋能企业数字化创新”为主题,网易云企业服务部总经理岳峥辉,浙江省首席信息 ...

  8. bzoj 1599: [Usaco2008 Oct]笨重的石子【枚举】

    --我为什么要写这种题解-- 枚举投掷情况即可 #include<iostream> #include<cstdio> using namespace std; int s1, ...

  9. 【原创】Maven安装和配置

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 前提 利用maven进行java项目或J2EE项目开发,要求电脑已配置java开发环境(JDK) 下载 下载地址:http://maven.a ...

  10. 反向代理与Real-IP和X-Forwarded-For(转)

    如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务).那Nginx Backend如何才能拿到真 ...