C++初学(10)

10.1、共用体

共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。比如说:结构可以同时存储int、long、和double,而共用体只能存储int、long、或double。共用体的句式与结构相似,但含义不同。例如:

union one4all
{int int_val;long long_val;double double_val;
};

可以使用one4all变量存储int、long或double,条件是在不同的时间进行:

one4all pail;
pail.int_val=15;
cout<<pail.int _val;
pail.double_val=1.89;
cout<<pail.double_val;

pail有时可以是int变量,有时也可以是double变量。成员名称标识了变量的容量。由于共用体内次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以共用体的长度为其最大成员的长度。

共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用时),可节省空间。如:

sturct widget
{char brand[20];int type;union id{long id_num;char id_char[20];}id_val;
};
…
widget prize;
…
if (prize.type == 1)
cin >> prize.id_val.id_num;
else
cin >> prize.id_val.id_char;

匿名共用体没有名称,其成员将成为位于相同地址处的变量。

sturct widget
{char brand[20];int type;union id{long id_num;char id_char[20];};
};
…
widget prize;
…
if (prize.type == 1)
cin >> prize.id_num;
else
cin >> prize.id_char;

由于共用体是匿名的,因此id_num和id_char被视为prize的两个成员,它们的地址相同,所以不需要中间标识符id_val。

共用体常用于节省空间,对于某些应用程序来说内存非常宝贵,共用体能发挥很好的作用。

10.2、枚举

C++的enum工具提供了另一种创建符号常量的方式,这种方式可以用来代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。如:

enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};

这条语句完成两项任务:

(1)让spectrum成为新类型的名称:spectrum被称为枚举,就像struct变量被称为结构一样。

(2)将red、orange、yellow等作为符号常量,它们对应整数值0~7。这种常量叫作枚举量。

在默认情况下,将整数值赋给枚举量,第一个枚举量是0,第二个枚举量是1,以此类推。

可以用枚举名来声明这些类型的变量:

spectrum band;

枚举变量有以下特殊性质:

(1)在不进行强制类型转化的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量,

如:可以band=blue;而不能band=2000;。因此spectrum变量受到限制,只有8个可能的值,编译器会将非enum的值赋给enum变量视为错误。

(2)对于枚举,只定义了赋值运算符。例如上面给band赋值,但是加减法之类的运算不能进行。

(3)枚举量是整型,可以被提升为int类型,但int类型不能自动转换为枚举类型:

你可以int color=blue;以及color=3+red;。表达式的3+red中的加法并非为枚举量定义,但red被转换位int类型,因此结果的;类型也是int。

10.2.1、设置枚举量的值

可以使用赋值运算符来显示地设置枚举量的值:

enum bits{onr=1,two=2,four=4,eight=8};

指定的值必须是整数,也可以显示地定义其中一些枚举量的值:

enum bigstep={first,second=100,third};

这里first默认设置为0,后面没有初始化的枚举量的值将比前面的枚举量大1,因此third的值为101。

你也可以创建多个相同值的枚举量:

enum {zero,null=0,one,numero_uno=1};

其中zero和null都为0,noe和numero_uno都为1.

10.2.2、枚举的取值范围

C++现在通过强制类型转换,增加了可赋给枚举变量的合法值。每个枚举都有取值范围,通过强制转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值。例如:

enum bits{one=1,two=2,four=4,eight=8};
bits myflag;

下面的代码将是合法的:

myflag=bits(6);

6不是枚举值,但是它位于枚举定义的取值范围内。

取值范围的定义:需要知道枚举量的最大值,找到大于这个最大值的、最小值的2的幂,将它减去1,得到的就是取值范围的上限。比如前面的101值,在2的幂里比这个数大的最小值是128,所以上限为127。关于下限,最小值大于0则为0,否则方法与上限一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Milvus Cloud向量数据库指南》——Zilliz Cloud 高可用性深度解析:赋能GenAI应用,引领非结构化数据新纪元

在人工智能与大数据技术日新月异的今天,非结构化数据的处理与分析已成为推动行业智能化转型的关键驱动力。Zilliz Cloud,作为基于开源向量数据库Milvus构建的全托管解决方案,不仅革新了非结构化数据的存储与查询方式,更以其卓越的高可用性设计,为开发人员构建高效、可靠的…

c++----内存管理

okk&#xff0c;大家好。我们大家学习了鄙人的前面前面几篇博客&#xff0c;并且还稍微使用了一些c的基础知识。并且我们前面都说过&#xff0c;我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊&#xff0c;内…

【linux深入剖析】初识线程---线程概念

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. Linux线程概念什么是线…

k8s中yaml文件的编写

目录 1.编写pod.yaml 2.编写deploment.yaml 3.编写service.yaml关联创建的pod 4.总结获取K8S资源配置清单文件模板方法 方法1&#xff1a;根据现有资源导出yaml文件修改配置&#xff0c;重新创建 方法2&#xff1a;根据现有资源&#xff0c;进入其配置中&#xff0c;复制…

中国AI大模型场景探索及产业应用调研报告

AI大模型发展态势 定义 AI大模型是指在机器学习和深度学习领域中&#xff0c;采用大规模参数(至少在一亿个以上)的神经网络模型&#xff0c;AI大模型在训练过程中需要使用大量的算力和高质量的数据资源。 产业规模 2023年&#xff0c;中国大模型市场规模为147亿。结合《202…

滚雪球学Java(65-5):面对Properties的各种坑,你需要知道的Java小技巧

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

C++初学者指南-5.标准库(第二部分)--移除元素算法

C初学者指南-5.标准库(第二部分)–移除元素算法 文章目录 C初学者指南-5.标准库(第二部分)--移除元素算法remove / remove_ifremove_copy / remove_copy_ifunique / unique_copyerase / erase_if相关内容 不熟悉 C 的标准库算法&#xff1f; ⇒ 简介 remove / remove…

【解决error】安装torch 1.1.0

第一步 当云服务器上没有指定版本的torch可以选择 先确定指定torch符合的python版本号 例如这里&#xff0c;我需要安装torch1.1.0&#xff0c;所以需要python>3.6 且 python<3.7 根据python版本&#xff0c;确定服务器安装torch的版本配置 第二步 新建conda虚拟环境…

iPhone苹果密码解锁工具专业版_不限制电脑

iPhone苹果密码解锁工具专业版_不限制电脑 Aiseesoft iPhone Unlocker&#xff1a;轻松解锁iPhone。功能强大&#xff1a;一键移除4位、6位密码、Touch ID和Face ID。 隐私保护&#xff1a;创建密码&#xff0c;安全无忧。数据提醒&#xff1a;解锁时&#xff0c;注意数据和设…

docker部署可执行的jar

1.将项目打包&#xff0c;上传到服务器的指定目录 2.在该目录下创建Dockerfile文件 3.Dockerfile写入如下指令 # 基于哪个镜像 FROM java:8 # 拷贝文件到容器&#xff0c;也可以直接写成ADD xxxxx.jar /app.jar ADD springboot-file-0.0.1.jar file.jar RUN bash -c touch /…

用TypeScript完成的贪吃蛇小游戏

食物类Fod // 定义 class Food {// 定义一个属性表示食物所对应的元素element:HTMLElement;constructor(){//加个&#xff01;表示不能为空,非空断言操作符 //获取页面中的food元素并将其赋值给element this.elementdocument.getElementById(food)!;}// 定义一个获取食物x轴坐…

(六)activiti-modeler 设计器属性编辑弹窗bug修复

BUG重现 在使用流程设计器时&#xff0c;经常碰到弹窗不小心关闭&#xff0c;比如不小心点击了灰色背景上&#xff0c;此时BUG就出现了。弹窗被关闭了&#xff0c;分配用户属性被置空了&#xff0c;以前有数据也被清空了&#xff0c;还无法再次点击弹窗编辑。 不仅仅是分配用…

【Vue3】组件通信之v-model

【Vue3】组件通信之v-model 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

LDR6020快充线,科技与便捷的新宠

在快节奏的现代生活中&#xff0c;充电效率成为了我们不可忽视的一个重要因素。随着智能手机、平板电脑等电子设备的普及&#xff0c;快充线以其独特的优势逐渐成为充电设备市场的新宠。 快充线&#xff0c;相比于传统的普通充电线&#xff0c;快充线在充电速度上有着显著的提升…

五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置

项目描述 上位机将截图数据通过 XDMA 写入到 FPGA 侧的 DDR 内存区域 1 中通过 axi_lite 接口给 axi_read_start 信号&#xff0c;通知 AXI_read 模块启动读取数据&#xff0c;然后通过 GTP TX 模块发送出去。经过光纤回环&#xff0c;GTP RX 端接收到数据&#xff0c;送给 AX…

微分方程的数值解法——Runge-Kutta (RK4)

Runge-Kutta (RK4)   The Runge-Kutta (RK4) methods are used to solve the solution of the non-liner ordinary differential equation. Here, we will simply summary this method.   Assume the Intial Value Piont (IVP) is satisfied: y ′ f ( t , y ) , y ( t 0 )…

python-查找元素3(赛氪OJ)

[题目描述] 有n个不同的数&#xff0c;从小到大排成一列。现在告诉你其中的一个数x&#xff0c;x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入&#xff1a; 输入共两行第一行为两个整数n、x。第二行为n个整数&#xff0c;代表a[i]。输出&#x…

椭圆曲线加法运算

1. 定义 椭圆曲线 (Elliptic Curve) 不是函数&#xff0c;而是一条平面曲线&#xff0c;其方程是定义如下&#xff1a; y 2 x 3 a x b y^2x^3axb y2x3axb 其中&#xff0c;判别式 Δ − 16 ( 4 a 3 27 b 2 ) ≠ 0 \Delta -16(4a^327b^2)\neq 0 Δ−16(4a327b2)0。判别…

Java 并发编程:一文了解 synchronized 的使用

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 027 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

keil编译报错error:#8:missing closing quote 处理

MDK5采用UTF-8&#xff0c;提示很多个这样的error:#8&#xff1a;missing closing quote 的错误信息。提供以下几种方式解决&#xff1a; 在KEIL中Options for Target Flash -> C/C -> Misc Controls添加“--localeenglish”。