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各种 ...
随机推荐
- css3 3d特效汇总
本篇全是实战,没有基础,如果不明白3d特效的原理,可能会看不懂,不过没关系,给你推荐一下 张鑫旭css3 3d转换,或者看我的另一篇博客 css3 2d转换3d转换以及动画的知识点汇总,看完这些3d ...
- LAMP安装问题【已解决】
1.编译不通过提示cannot find mysql header files under /usr/local/mysql解决办法:修改./configuer --with-mysql=/usr/ ...
- TQ210--UBOOT移植笔记--添加自己的单板【学习笔记】
在uboot的源码的根目录下的readme中有介绍如何在uboot中添加自己的单板: 一.在boards.cfg中添加自己的单板的信息,可以模仿smdkc100去添加自己的单板的信息 二.复制单板的配 ...
- POJ 1330 LCA裸题~
POJ 1330 Description A rooted tree is a well-known data structure in computer science and engineerin ...
- codeforces 965E Trie+multiset
E. Short Code time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 百度上传组件 WebUploader
WebUploader http://fex.baidu.com/webuploader/doc/index.html WebUploader API 文档详细解读 源码以及示例:https://gi ...
- 浙江省CIO协会钱塘江论坛近日在网易云创沙龙宣布成立
本文来自网易云社区 9月19日,由网易云与浙江省首席信息官协会共同主办的“网易云创CIO沙龙”在杭州举行,本次活动以“瞩目钱塘,赋能企业数字化创新”为主题,网易云企业服务部总经理岳峥辉,浙江省首席信息 ...
- bzoj 1599: [Usaco2008 Oct]笨重的石子【枚举】
--我为什么要写这种题解-- 枚举投掷情况即可 #include<iostream> #include<cstdio> using namespace std; int s1, ...
- 【原创】Maven安装和配置
ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 前提 利用maven进行java项目或J2EE项目开发,要求电脑已配置java开发环境(JDK) 下载 下载地址:http://maven.a ...
- 反向代理与Real-IP和X-Forwarded-For(转)
如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务).那Nginx Backend如何才能拿到真 ...