博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++/C union使用记一下锅
阅读量:6038 次
发布时间:2019-06-20

本文共 2097 字,大约阅读时间需要 6 分钟。

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

记一下 关于使用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 0 (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 9), the default constructor for T is called (and the initialization isill-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[100];        char s[2];        MYUNION(){            strcpy(avs,"abs");        }        ~MYUNION(){        }    }a;

还是我在标准中标粗的那句话,第一个就是第一个,你别想着大的为零,下面看代码

union MYUNION{        char avs[100];        char s[2];            }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的总结也就到这儿了吧,写的有点乱,如果有哪位博友看到问题或者其他排版问题  /*欢迎评论和私聊*/

 

转载于:https://www.cnblogs.com/jijiboy/p/9966289.html

你可能感兴趣的文章
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
Google Chrome开发者工具
查看>>
第一阶段冲刺报告(一)
查看>>
使用crontab调度任务
查看>>
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>
联合体、结构体简析
查看>>
使用throw让服务器端与客户端进行数据交互[Java]
查看>>
java反射与代理
查看>>
深度分析Java的ClassLoader机制(源码级别)
查看>>
微服务架构选Java还是选Go - 多用户负载测试
查看>>
我的友情链接
查看>>
Javascript中的异步如何实现回调
查看>>
halcon算子介绍
查看>>
挖掘你不知道的windowsxp中的带宽潜能
查看>>
Software Engineering 招聘要求
查看>>
【转载】InstallAnyWhere自动化制作安装包的知识
查看>>