当前位置: 首页 > news >正文

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,否则方法与上限一致。

相关文章:

C++初学(10)

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

在MAC安装Lazarus 起点 - 我们的第一个Lazarus程序!

安装Lazarus 首先到Lazarus官网&#xff0c;找到合适的版本下载页面&#xff0c;比如Mac的版本&#xff1a; https://sourceforge.net/projects/lazarus/files/Lazarus%20macOS%20x86-64/Lazarus%203.4/ 将三个文件都下载到本地&#xff0c;需要安装这三个文件&#xff1a; …...

【每日刷题】Day96

【每日刷题】Day96 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCP 44. 开幕式焰火 - 力扣&#xff08;LeetCode&#xff09; 2. 1022. 从根到叶的二进制数之和 - …...

EGO-Swarm 仿真环境搭建

EGO-Swarm仿真环境搭建 参考教程&#xff1a; https://github.com/ZJU-FAST-Lab/ego-planner-swarm EGO-Swarm是一种分散的异步系统解决方案&#xff0c;用于仅使用机载资源在未知的障碍物丰富的场景中进行多机器人自主导航。 1. 查看系统环境 要运行本仿真程序&#xff0c…...

【EI会议征稿通知】第九届计算机技术与机械电气工程国际学术论坛(ISCME 2024)

会议官网&#xff1a;www.is-cme.com 一轮截稿时间&#xff1a;2024年8月16日&#xff08;早投稿&#xff0c;早录用&#xff09; 大会时间&#xff1a;2024年11月8-10日 大会地点&#xff1a;中国 南京 接受/拒稿通知&#xff1a;投稿后1-2周 收录检索&#xff1a;EI Compend…...

【starRocks-docker 部署问题汇总】

Starrocks系列文章目录 例如&#xff1a;starrocks 常见问题汇总 文章目录 Starrocks系列文章目录前言一、Starrocks-be运行一段时间后,容器无法restart&#xff1f;二、等待后续跟新 前言 starrocks基于docker-compose部署的3节点分布式(3FE,3BE)&#xff0c;遇到的问题也都…...

threejs中,如何检测一个模型周边一定范围内的其它模型

在Three.js中&#xff0c;要检测一个模型&#xff08;我们可以称之为“主体模型”&#xff09;周边一定范围内的其他物体&#xff0c;你可以通过以下步骤来实现&#xff1a; 1、定义检测范围&#xff1a; 首先&#xff0c;确定你需要检测的范围&#xff0c;这通常是一个以主体…...

UDP端口可达性检测(端口扫描)工具开发

UDP端口可达性检测(端口扫描)工具开发 1、应用场景分析 主机X与主机Y部署在AB双网环境下&#xff0c;两个主机间通过UDP协议进行数据交互。应用程序发送数据时&#xff0c;优先使用A网发送数据&#xff0c;如果A网异常则通过B网发送数据。两个主机应用间没有设置心跳帧 &…...

第三届计算、通信、感知与量子技术国际会议(CCPQT 2024)会议通知

会议信息 大会官网&#xff1a;http://www.ccpqt.org/ 官方邮箱&#xff1a;ccpqt_paper126.com 会议地点&#xff1a;中国珠海 会议时间&#xff1a;2024年10月25日-10月27日 主讲嘉宾 Prof. Trung Q. Duong IEEE Fellow and AAIA Fellow Memorial University of Newfoundl…...

Qt文件读写

Qt中文件读写类简述 包含头文件#include <QFile> 读写模式如下 枚举 文件读写步骤 1 先使用string 类型来接受打开文件的返回值 QFileDialog::getOpenFileName(this,"文件","./"); //打开一个文件 2 构建文件对象 Qfile ff (qstring)接受打…...

发现了一套超厉害的英语资料,绝对YYDS

昨某节目主持人与我闲聊英语学习的事情。 她工作数年&#xff0c;希望提升英文资讯的阅读能力。她主持的是中文节目&#xff0c;但节目对个人的知识广度和深度要求颇高。 现在的知识又太泛太杂&#xff0c;你需要了解国外最新资讯&#xff0c;多获得一手资料&#xff0c;面对节…...

C# new关键字作用

在C#中&#xff0c;当子类定义了与父类同名的字段或者方法时&#xff0c;可以使用new关键字进行隐藏。使用new和不使用new关键字的区别主要在于如何处理字段的隐藏和可访问性。 讲人话就是&#xff0c;假设父类的字段或方法&#xff0c;子类是可以直接访问的&#xff08;publi…...

Python代码之特征工程基础

1. 什么是特征工程 特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步&#xff0c;因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息&#xff0c;并将其转换为模型可以理解和使…...

低代码平台:效率利器还是质量妥协?

目录 低代码平台&#xff1a;效率利器还是质量妥协&#xff1f; 一、引言 二、低代码平台的定义和背景 1、什么是低代码平台&#xff1f; 2、低代码平台的兴起 三、低代码开发的机遇 1、提高开发效率 2、降低开发成本 3、赋能业务人员 四、低代码开发的挑战 1、质量…...

大数据-Big Data

1. 简介 1.1. 主要特点 大数据(Big Data)是指规模巨大、复杂多变的数据集合,这些数据集来源于多个不同的源,包括社交媒体、移动设备、物联网、传感器等。大数据的主要特点如下: 数据量大(Volume):大数据的起始计量单位是PB(1024TB)、EB(1024PB,约100万TB)或ZB(…...

Redis的持久化的策略

Redis的持久化的策略 官方文档说明 AOF持久化策略RDB持久化的策略 AOF持久化策略 AOF持久性记录服务器接收到的每个写操作&#xff0c;然后&#xff0c;可以在服务器启动时再次重播这些操作&#xff0c;重建原始数据集&#xff0c;使用与Redis协议本身相同的格式记录命令。…...

【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装

文章目录 1.基本原理2.下载并解压ZooKeeper3.配置环境变量4.配置ZooKeeper5.创建数据目录并初始化myid6.启动ZooKeeper7.配置ZooKeeper集成到Hadoop8.重启Hadoop9.ZooKeeper状态检查 1.基本原理 ZooKeeper 是一个分布式协调服务&#xff0c;用于分布式系统中管理配置信息、命名…...

【C/C++笔记】:易错难点3 (二叉树)

选择题 &#x1f308;eg1 一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树&#xff0c;叶子节点的个数最多会差多少个&#xff08;&#xff09;&#xff1f; 正确答案&#xff1a; C A. 3 B. 5 C. 7 D. 9 解析&#xff1a;普通二叉树的叶子节…...

一篇文章解决Webpack

一&#xff1a;什么是webpack webpack是一个用于现代JavaScript应用程序的静态模块打包工具。本质是一个软件包&#xff0c; 静态模块包括以下&#xff1a;html、css、js、图片等固定内容的文件 二&#xff1a;webpack工作原理 当 webpack 处理应用程序时&#xff0c;它会在内…...

速盾:cdn如何解析php文件中的图片?

CDN&#xff08;Content Delivery Network&#xff09;是一种通过分布在全球各地的服务器来加速网络内容传输的技术。CDN通过将内容缓存在离用户最近的服务器上&#xff0c;提供更快的访问速度和更好的用户体验。在解析PHP文件中的图片时&#xff0c;CDN可以起到以下几个方面的…...

手把手教你用Video-LLaVA和LoRA,微调自己的视频异常分析‘侦探’(附代码思路)

用Video-LLaVA和LoRA打造视频异常分析专家的实战指南 当监控摄像头捕捉到一场突如其来的骚乱&#xff0c;或是生产线上的机械臂突然失控&#xff0c;传统算法只能给出冷冰冰的"异常报警"。而现在&#xff0c;我们可以教会AI像经验丰富的安全专家那样&#xff0c;不仅…...

幕连投屏电脑版

链接&#xff1a;https://pan.quark.cn/s/81fb3b0bcdee幕连投屏电脑版&#xff0c;通过各平台和设备间的屏幕同屏技术&#xff0c;让人们可以更轻松地分享屏幕&#xff0c;使会议教学更直观&#xff0c;家庭生活更精彩&#xff0c;让同屏不再只是冰冷的技术&#xff0c;而拥有了…...

毕业设计实战:基于SSM+JSP+MySQL私人定制旅游系统设计与实现完整版指南

毕业设计实战&#xff1a;基于SSMJSPMySQL私人定制旅游系统设计与实现完整版指南 在开发私人定制旅游系统本科毕业设计时&#xff0c;我曾因旅游路线订单表未通过用户ID与路线ID双外键关联踩过致命坑——初期仅设计订单号、价格等字段&#xff0c;未与用户表、旅游路线表建立关…...

MySQL数据库用户密码加密存储机制_Authentication Plugin配置

MySQL 8.0默认使用caching_sha2_password插件加密密码&#xff0c;采用SHA-256加盐哈希并缓存认证状态&#xff1b;旧客户端因不兼容该插件而无法连接&#xff0c;需通过ALTER USER切换为mysql_native_password或配置default_authentication_plugin。MySQL 8.0 默认用 caching_…...

使用钉钉远程操作你的claude code拘

先回顾&#xff1a;三次握手&#xff08;建立连接&#xff09;核心流程&#xff08;实际版&#xff09; 为了让挥手流程衔接更顺畅&#xff0c;咱们先快速回顾三次握手的实际核心&#xff0c;避免上下文脱节&#xff1a; 第一步&#xff08;客户端→服务器&#xff09;&#xf…...

GoCodingInMyWay嘶

一、什么是 Q 饱和运算&#xff1f; 1. 核心痛点&#xff1a;普通运算的 “数值回绕” 普通算术运算&#xff08;如 ADD/SUB&#xff09;溢出时&#xff0c;数值会按补码规则 “回绕”&#xff0c;导致结果完全错误&#xff1a; 示例&#xff1a;int8_t 类型最大值 127 1 → 结…...

收藏!Java后端裁员潮下,程序员(小白必看)靠大模型破局翻身

凌晨一点半&#xff0c;手机屏幕突然亮起&#xff0c;是做Java后端开发的发小发来的消息&#xff0c;字里行间全是慌乱与不甘&#xff1a;“刚收到公司裁员通知&#xff0c;名单已经定死了&#xff0c;我真的懵了——部门里干了五年的资深老程都没保住&#xff0c;我这三年经验…...

随记 - 2026 年 4 月 3 日

写在前面1111 字 | 感触 | 朋友 | 经历 | 友谊 | 青春 | 爱与被爱正文 这则随记可能没有一个特定的主题&#xff0c;只是最近期的感想。 昨天中午&#xff0c;我送别了远道而来的大学室友。跨越许多省份&#xff0c;从安徽到四川。而他这次来见我们的理由也很朴素。 “只是很久…...

FlicFlac:Windows平台终极免费音频格式转换解决方案

FlicFlac&#xff1a;Windows平台终极免费音频格式转换解决方案 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为音频格式不兼容而烦恼吗&#xff…...

【大疆dji】ESDK开发环境搭建(网络配置篇)

1. 大疆ESDK开发环境网络配置概述 第一次接触大疆ESDK开发环境时&#xff0c;网络配置这个环节让我栽了不少跟头。记得去年给某物流园区部署无人机巡检系统时&#xff0c;光是让机场和边缘计算设备正常通信就折腾了整整两天。后来才发现&#xff0c;问题就出在一个小小的IP地址…...