C++关于Union使用的部分总结
说明:未加说明,struct均指C++语言中的struct(可以有成员函数,可以定义访问属性)
1 什么是Union?
(1)与class,struct相似用于定义数据结构;union 可以说是一种特殊的类,有自己的成员变量也可以有自己的成员函数,默认访问属性为public;
(2)共享同一内存;同一Union中的各个变量共享同一内存,也就是说,所有变量互斥存在。
(3)基于(2),Union那么有人可能问,一个Union结构占用的内存大小如何确定?不多说上代码:
// TemplateExe1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std;
union uEx {
int a;
char b;
double c; };
int main()
{
cout << sizeof(uEx) << endl; return ;
}
执行上述代码,不管你是否对uEx进行了初始化,sizeof(uEx)的大小始终为8(sizeof(double),32位IDE)。
由此可得,联合(共用体变量)共用同一内存,内存大小固定为成员变量所占内存的最大值。
2 为何使用Union?
重要原因:节省内存。
代码:
// TemplateExe1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std;
union uEx {
int a;
char b;
double c; };
class cEx
{
int a;
char b;
double c;
};
int main()
{
cout << sizeof(uEx) << endl;
cout << sizeof(cEx) << endl;
getchar();
return ;
}
以上代码运行结果是:
8
16。
3 如何用?
(1)同结构体一样,定义-初始化-使用;使用时注意共享内存即可。上代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
union Grade {
int number;
char mark;
bool pass; }uGrade;
int main()
{
uGrade.number = ;
printf("%d",uGrade.number);
getchar(); return ;
}
代码中定义了一个全局Union 类,三个变量表示分数的三种形式。
应用场景归纳如下:
1)一门课程需要一个Grade数据结构来表示成绩;
2)同时成绩有三种情况,并且一门课程的成绩只有一种表示(要么百分制,要么等级制,要么过与不过)。
这时即可使用Union;
C++关于Union使用的部分总结的更多相关文章
- SQL Server-聚焦UNIOL ALL/UNION查询(二十三)
前言 本节我们来看看有关查询中UNION和UNION ALL的问题,简短的内容,深入的理解,Always to review the basics. 初探UNION和UNION ALL 首先我们过一遍 ...
- SQL 提示介绍 hash/merge/concat union
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...
- LINQ to SQL语句(8)之Concat/Union/Intersect/Except
适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db ...
- SQLServer-----Union,Union All的使用方法
转载: http://blog.csdn.net/kiqinie/article/details/8132485 select a.Name from Material as a union sele ...
- 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = ...
- sql union和union all的用法及效率
UNION指令的目的是将两个SQL语句的结果合并起来.从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料. UNION的一个限制是两个 ...
- 【oracle】union、union all、intersect、minus 的用法及区别
一.union与union all 首先建两个view create or replace view test_view_1 as as c from dual union as c from dua ...
- sql with as union all
WITH RPL (FId,Fname,Forder) AS ( SELECT ment.deptno,ment.deptname,ment.orderno FROM JTERP..fg_depart ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- LINQ系列:LINQ to SQL Concat/Union
1. Concat 单列Concat var expr = (from p in context.Products select p.ProductName) .Concat( from c in c ...
随机推荐
- OpenGL下多个sampler在shader中的使用
在OpenGL中,sampler2D/Cube等做为uniform可以在fragment shader中使用.结合glActiveTexture和glUniform1i,实现texture与sampl ...
- C++对txt文本进行读写操作
输入输出,是每个程序员的基本功,尤其是对文本的输入和输出.最近,自己在这方面做了一些总结,不是很全面,希望在以后学习和工作的过程中慢慢补充,积累点点滴滴.P.S. 今天天气不错,雾霾散了,天空晴朗,惠 ...
- Android模拟器启动不了解决办法
问题描述:Windows2008中的MyEclipse项目在Windows2003中运行时无法启动模拟器. 解决要点:启动模拟器管理工具,在启动中设置属性中不勾选默认尺寸显示. 系统错误如下: [20 ...
- android的左右侧滑菜单实现
最近看了很多app应用都采用的是左右侧滑,比如网易新闻.凡客等 这里也试着写一下侧滑 首先看一下效果 然后给出xml布局代码 <RelativeLayout xmlns:android=&quo ...
- C++之多继承
#include <iostream> using namespace std ; class AA { public: int a ; void Say_hello(void) { co ...
- objective-c中@autoreleasepool的用法
objc中关于自动释放池,有两种语法,一种old-fashioned是: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //d ...
- Mac OS X版本的sublime text 3安装汇编语言语法支持
sublime是个好东西,小巧.功能强大而且跨平台! 不过默认的语法里没有对asm的支持,这让本猫情何以堪- 下面介绍一下Mac OS X中如何给sublime安装汇编的语法和自动汇编命令补全支持. ...
- leetCode之旅(14)-Number of 1 Bits
题目描述: Write a function that takes an unsigned integer and returns the number of '1' bits it has (als ...
- Fragment生命周期与Fragment执行hide、show后的生命周期探讨
一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...
- scrollWidth,clientWidth与offsetWidth的区别
scrollWidth 是对象的实际内容的宽,不包边线宽度,会随对象中内容的多少改变(内容多了可能会改变对象的实际宽度). clientWidth 是对象可见的宽度,不包滚动条等边线,会随窗口的显 ...