C++ Union妙用

Union是个不被注意的关键字,若不是为了继承C语言,它也不会出现在C++中。它的作用主要是节省内存空间,在嵌入式编程中有用。但在为当代微机设计的C++中,它也并非一无是处。请看看下面的代码:

class A
{
private:
    int a[10];
public:
    A(int n):a[0](n){}
};//Wrong code

你以为这代码能通过编译?是的,按道理来讲应该这样。但是运行一下编译器,你会得到如下错误expected ‘(‘ before ‘[‘ token:A(int n):a[0](n){}。额…貌似数组元素不能用于列表初始化。这时候,我们可以用union巧妙解决。

class A
{
private:
    union {
        int a[10];
        int a0;
    };
public:
    A(int n):a0(n){}
};

原理不难理解,按照union的机制,a0与a[0]其实是共用一个int的,也就是说a0和a[0]的地址相同,对a0的初始化也是对a[0]的初始化。

时间: 2024-12-20 01:29:29

C++ Union妙用的相关文章

Oracle Case When的妙用

Case when 的用法 --简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result1 WHEN expression2 THEN result2 ... WHEN expressionN THEN resultN ELSE default_result --搜索CASE表达式 使用条件确定返回值. 语法: CASE WHEN condition1 THEN result1 W

共用体union详解

一共用体的概念 当需要把不同类型的变量存放到同一段内存单元或对同一段内存单元的数据按不同类型处理则 需要使用共用体数据结构 例把一个整型变量一个字符型变量一个实型变量放在同一个地址开始的内存单元中 共用体的定义形式 union 共用体名 成员列表 变量列表 注意区分 共用体各成员占相同的起始地址所占内存长度等于最长的成员所占内存 结构体各成员占不同的地址所占内存长度等于全部成员所占内存之和 二共用体变量的引用 只能引用共用体变量的成员如 union data a; a.i; a.ch; a.f;

C语言union关键字,union和struct区别

union 关键字的用法与struct 的用法非常类似. union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,

(C语言)共用体union的使用方法举例

曾经在学校学习C语言的时候一直搞不懂那个共用体union有什么用的.工作之后才发现它的一些妙用,现举比例如以下: 1. 为了方便看懂代码. 比方说想写一个3 * 3的矩阵,能够这样写: [ 注:以下用红色部分标记的地方是后来加入上去的,谢谢yrqing718的提醒!] struct  Matrix { union { struct { float  _f11, _f12, _f13, _f21, _f22, _f23, _f31, _f32, _f33; }; float  f[3][3]; }

spark 教程三 spark Map filter flatMap union distinct intersection操作

RDD的创建 spark 所有的操作都围绕着弹性分布式数据集(RDD)进行,这是一个有容错机制的并可以被并行操作的元素集合,具有只读.分区.容错.高效.无需物化.可以缓存.RDD依赖等特征 RDD的创建基础RDD 1.并行集合(Parallelized Collections):接收一个已经存在的Scala集合,然后进行各种并行运算 var sc=new SparkContext(conf) var rdd=sc.parallelize(Array(2,4,9,3,5,7,8,1,6)); rd

哈希(4) - 求两个链表的交集(intersection)以及并集(union)

给定两个链表,求它们的交集以及并集.用于输出的list中的元素顺序可不予考虑. 例子: 输入下面两个链表: list1: 10->15->4->20 list2: 8->4->2->10 输出链表: 交集list: 4->10 并集list: 2->8->20->4->15->10 方法1 (简单方法) 可以参考链表系列中的"链表操作 - 求两个链表的交集(intersection)以及并集(union)" 方法2

《众妙之门——精通CSS3》一书知识点剖析

不得不佩服京东的速度,昨天刚下单的两本书今天上午就到了.其中一本是全彩页的<众妙之门 - 精通CSS3>,细看了前几十页,书上的叙述方式给我的印象其实不如“彩页”来的讨喜——接连说上几个例子,扔个例子的链接(没源码下载,要自己手动输入,而且近乎所有的例子页面均已失效),未经细剖便草草了事,感觉倒是适合作为厕所读物(汗).... 虽然书中不细剖,却也不能白花银子,不妨自己实打实地查资料.记笔记,不辜负了早上送出的老毛. P21 此处提到的例子动用了 -webkit-background-clip

System center 2012 R2 实战十、妙用SCO+SCOM实现声音告警

SCOM默认支持邮件告警,即时消息告警,短信告警,那么如果要实现声音告警,应该如何实现呢?大家可以好好思考一下,需求就是SCOM产生警报,同时触发声音告警+短信告警+邮件报警. 当时第一个想到的是Live Maps,Live Maps是一个单独的收费产品,通过Live Maps可以很好地与SCOM进行集成,还可以实现移动终端的声音告警,也可以做一套流程,比如说满足什么样子的条件,那些指定的服务器,去触发Sound声音插件,还可以实现地图展示,Live Maps有很多诱人的功能 产品地址如下 ht

Union函数

. 共用体声明和共用体变量定义 共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义 共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似.其形式为: union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名; 共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量.在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值. 下例表示声明一个共用体foo: uni