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

C++:枚举类的使用案例及场景

一、使用案例

在C++中,枚举类(也称为枚举类型或enum class)是C++11及以后版本中引入的一种更加强大的枚举类型。与传统的枚举(enum)相比,枚举类提供了更好的类型安全性和作用域控制。下面是一个使用枚举类的案例,这个案例模拟了一个简单的交通灯系统。

#include <iostream>  // 定义一个枚举类来表示交通灯的状态  
enum class TrafficLight {  RED,    // 红灯  YELLOW, // 黄灯  GREEN    // 绿灯  
};  // 一个函数,用于打印当前交通灯的状态  
void printTrafficLight(TrafficLight light) {  switch (light) {  case TrafficLight::RED:  std::cout << "红灯亮,请停车等待" << std::endl;  break;  case TrafficLight::YELLOW:  std::cout << "黄灯亮,请准备停车" << std::endl;  break;  case TrafficLight::GREEN:  std::cout << "绿灯亮,可以通行" << std::endl;  break;  default:  std::cout << "未知状态" << std::endl;  }  
}  int main() {  // 使用枚举类  TrafficLight currentLight = TrafficLight::RED;  printTrafficLight(currentLight);  // 尝试修改交通灯状态  currentLight = TrafficLight::GREEN;  printTrafficLight(currentLight);  // 尝试隐式转换(这是不允许的,因为使用了enum class)  // 下面的代码会编译失败  // printTrafficLight(2); // 错误:无法从'int'转换为'TrafficLight'  return 0;  
}

在这个例子中,TrafficLight是一个枚举类,它有三个成员:REDYELLOWGREEN,分别代表交通灯的不同状态。printTrafficLight函数接受一个TrafficLight类型的参数,并根据参数的值打印出相应的状态信息。

与普通的枚举(enum)相比,enum class提供了更强的类型检查。在上面的代码中,如果你尝试将整数直接传递给printTrafficLight函数(如printTrafficLight(2);),编译器会报错,因为enum class类型的值不能直接由整数隐式转换而来,这有助于减少因类型不匹配而导致的错误。

此外,由于enum class的成员默认是private的,它们的作用域被限制在枚举类内部,这有助于避免命名冲突,并提高了代码的可读性和可维护性。在需要时,可以通过::操作符来访问枚举类的成员,如TrafficLight::RED

二、使用场景

枚举类(enum class)的主要目的和优点包括:

  1. 类型安全:与传统的枚举(enum)相比,枚举类提供了更强的类型安全性。枚举类的成员不会隐式地转换为整数或与其他枚举类型的成员进行比较,这有助于减少因类型不匹配而导致的错误。

  2. 作用域控制:枚举类的成员默认具有枚举类的作用域,这有助于避免命名冲突。要使用枚举类的成员,通常需要使用枚举类名和::操作符(例如TrafficLight::RED)。

  3. 可定义性和可扩展性:枚举类可以像其他类一样,拥有成员函数(包括构造函数、析构函数和操作符重载等)。这提供了更多的灵活性和可扩展性。

  4. 清晰的语义:枚举类提供了一种将一组命名的整数常量组织在一起的方式,使得代码更加清晰易懂。枚举类的成员名通常能够清晰地表达其代表的语义。

然而,枚举类声明的对象并不仅限于与枚举类内部定义的数据进行对比。它们还可以用于各种需要这些枚举值的场景,比如:

  • 作为函数的参数或返回值,以指示函数的状态或执行的结果。
  • 作为类的成员变量,以表示对象的状态或属性。
  • 在条件语句(如ifswitch)中作为条件表达式,以根据枚举值执行不同的代码路径。
  • 在循环中作为迭代器的值,尽管这种情况较少见,但在某些特定场景下可能会用到。

因此,虽然将枚举类声明的对象与枚举类内部定义的数据进行对比是枚举类的一种常见用法,但枚举类的用途远不止于此。

相关文章:

C++:枚举类的使用案例及场景

一、使用案例 在C中&#xff0c;枚举类&#xff08;也称为枚举类型或enum class&#xff09;是C11及以后版本中引入的一种更加强大的枚举类型。与传统的枚举&#xff08;enum&#xff09;相比&#xff0c;枚举类提供了更好的类型安全性和作用域控制。下面是一个使用枚举类的案…...

中英双语介绍美国的州:明尼苏达州(Minnesota)

中文版 明尼苏达州简介 明尼苏达州位于美国中北部&#xff0c;以其万湖之州的美誉、丰富的自然资源和多样化的经济结构而著称。以下是对明尼苏达州的详细介绍&#xff0c;包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 明尼苏达州东接威斯康星州&#xff0…...

Python实现万花筒效果:创造炫目的动态图案

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制万花筒图案的函数主循环 完整代码 引言 万花筒效果通过反射和旋转图案创造出美丽的对称图案。在这篇博客中&#xff0c;我们将使用Python来实现一个动态的万花筒效果。通过利用Pygame库&#xf…...

JavaScript之深入对象,详细讲讲构造函数与常见内置构造函数

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家详细讲讲构造函数与常见内置构造函数&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;原创不易&#xff0c;如果能帮助到带大家&#xff0c;欢迎…...

PyQt5水平布局--只需5分钟带你搞懂

PyQt5水平布局&#xff08;QHBoxLayout&#xff09;是一种在GUI应用程序中用于组织和排列控件的布局方式。它允许开发者将控件在水平方向上从左到右依次排列&#xff0c;非常适合于需要并排显示控件的场景&#xff0c;如工具栏、水平菜单等。 import sys from PyQt5.QtWidgets…...

telegram mini app和game实现登录功能

接上一篇文章&#xff0c;我们在创建好telegram机器人后&#xff0c;开始开发小游戏或者mini App&#xff0c;那就避免不了登录功能。 公开链接 bot设置教程:https://lengmo714.top/6e79860b.html 参考教程参考教程,telegram已经给我们提供非常多的api&#xff0c;我们在获取用…...

【Python】字典练习

python期考练习 目录 1. 首都名​编辑 2. 摩斯电码 3. 登录 4. 学生的姓名和年龄​编辑 5. 电商 6. 学生基本信息 7. 字母数 1. 首都名 初始字典 (可复制) : d{"China":"Beijing","America":"Washington","Norway":…...

Apache POI、EasyPoi、EasyExcel

目录 ​编辑 &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&#xff09;EasyPoi使用 &#xff08;三&#xff09;EasyExcel使用 写 读 最简单的读​ 最简单的读的excel示例​ 最简单的读的对象​ &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&…...

gcop:简化 Git 提交流程的高效助手 | 一键生成 commit message

&#x1f496; 大家好&#xff0c;我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。&#x1f4e3; 个人说明书&#xff1a;Zeeland&#x1f4e3; 个人网站&#xff1a;https://me.zeeland.cn/&#x1f4da; Github…...

TS_类型

目录 1.类型注解 2.类型检查 3.类型推断 4.类型断言 ①尖括号&#xff08;<>&#xff09;语法 ②as语法 5.数据类型 ①boolean ②number ③string ④undefined 和 null ⑤数组和元组 ⑥枚举 ⑦any 和void ⑧symbol ⑨Function ⑩Object 和 object 6.高…...

Linux源码阅读笔记10-进程NICE案例分析2

set_user_nice set_user_nice函数功能&#xff1a;设置某一进程的NICE值&#xff0c;其NICE值的计算是根据进程的静态优先级&#xff08;task_struct->static_prio&#xff09;&#xff0c;直接通过set_user_nice函数更改进程的静态优先级。 内核源码 void set_user_nice…...

Elasticsearch实战教程: 如何在海量级数据中进行快速搜索

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Apache Lucene™的开源搜索引擎&#xff0c;无论在开源还是专有领…...

Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 数据压缩…...

【笔记】Android Settings 应用设置菜单的界面代码介绍

简介 Settings应用中&#xff0c;提供多类设置菜单入口&#xff0c;每个菜单内又有各模块功能的实现。 那么各个模块基于Settings 基础的界面Fragment去实现UI&#xff0c;层层按不同业务进行封装继承实现子类&#xff1a; DashboardFragmentSettingsPreferenceFragment 功…...

Symfony配置管理深度解析:构建可维护项目的秘诀

Symfony是一个高度灵活且功能丰富的PHP框架&#xff0c;它提供了一套强大的配置管理系统&#xff0c;使得开发者能够轻松定制和优化应用程序的行为。本文将深入探讨Symfony中的配置管理机制&#xff0c;包括配置的结构、来源、加载过程以及最佳实践。 一、配置管理的重要性 在…...

视频的宣传片二维码怎么做?扫码播放视频的制作教程

现在很多的宣传片会通过扫码的方式来展示&#xff0c;通过将视频生成二维码之后&#xff0c;其他人就可以扫码来查看视频内容&#xff0c;从而简化获取视频的过程&#xff0c;提升视频传播的效率及用户查看视频的便捷性。目前&#xff0c;日常生活和工作中就有视频二维码的应用…...

实用的网站

前端 精简CSS格式 Font Awesome 图标库 BootCDN 加速服务 LOGO U钙网 AI AI工具集 视频下载 B站视频解析下载...

Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo&#xff1f; 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…...

使用 PyTorch 创建的多步时间序列预测的 Encoder-Decoder 模型

Encoder-decoder 模型在序列到序列的自然语言处理任务&#xff08;如语言翻译等&#xff09;中提供了最先进的结果。多步时间序列预测也可以被视为一个 seq2seq 任务&#xff0c;可以使用 encoder-decoder 模型来处理。本文提供了一个用于解决 Kaggle 时间序列预测任务的 encod…...

开启IT世界的第一步:高考新生的暑期学习指南

目录 前言 了解IT领域 学习编程语言 实践项目 学习资源 阅读专业书籍 培养良好的学习习惯 结语 最后 - 投票 前言 七月的钟声敲响&#xff0c;各省的高考分数已揭晓&#xff0c;意味着一段紧张而又充满奋斗的旅程画上了句号。然而&#xff0c;高考的结束并不意味…...

L1正则与次梯度

L1&#xff1a;稀疏权重、解易落在轴上、特征选择&#xff08;应用场景&#xff09;、w0w0w0不可导需次梯度subgradient&#xff1a;∂f(x){g∣f(y)≥f(x)gT(y−x),∀ y∈dom f}\partial f(x)\{g|f(y)\geq f(x) g^T(y-x),\forall\ y\in \text{dom}\ f \}∂f(x){g∣f(y)≥f(x)g…...

Linux内核模块多文件编译:从Kbuild原理到工程实践

1. 项目概述&#xff1a;从单文件到多文件内核模块的进阶之路搞内核模块开发的朋友&#xff0c;估计都是从经典的“Hello World”单文件模块开始的。一个hello.c&#xff0c;配上几行简单的Makefile&#xff0c;insmod一下看到打印信息&#xff0c;成就感就来了。但当你真正想干…...

观察Taotoken用量看板如何精细化管控API调用成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken用量看板如何精细化管控API调用成本 对于依赖大模型API进行开发的项目团队而言&#xff0c;成本控制与预算管理是项目…...

用字体绘制AI架构图:llama.ttf项目解析与OpenType字体技术实践

1. 项目概述&#xff1a;一个字体文件&#xff0c;为何能引发如此关注&#xff1f;最近在GitHub上&#xff0c;一个名为“fuglede/llama.ttf”的项目悄然走红&#xff0c;乍一看&#xff0c;这只是一个普通的字体仓库&#xff0c;但它的热度却远超许多复杂的软件库。作为一名长…...

多模态大模型应用开发利器:xBrain工具箱核心解析与实战

1. 项目概述&#xff1a;一个面向多模态大模型的开源工具箱 最近在折腾大模型应用开发&#xff0c;特别是涉及到图像、文本、音频等多模态任务时&#xff0c;常常感到工具链的割裂。文本生成有成熟的框架&#xff0c;视觉任务又有另一套生态&#xff0c;想把它们高效地整合到一…...

3分钟搞定Figma中文界面:设计师必备的终极汉化方案

3分钟搞定Figma中文界面&#xff1a;设计师必备的终极汉化方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 面对Figma满屏的英文界面感到困扰吗&#xff1f;专业术语看不懂、操作按钮…...

Windows和Office智能激活终极指南:KMS_VL_ALL_AIO完整使用教程

Windows和Office智能激活终极指南&#xff1a;KMS_VL_ALL_AIO完整使用教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗&#xff1f;Office文档突…...

Cursor Pro破解完整指南:3种方法实现AI编程助手永久免费使用

Cursor Pro破解完整指南&#xff1a;3种方法实现AI编程助手永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached yo…...

小盲区、大智慧:大禹电子双探头传感器助力垃圾精细化管理

在智慧城市建设的浪潮下&#xff0c;环卫作业的数字化与精细化已成为提升城市管理效率的关键一环。针对客户提出的垃圾桶顶部安装、测量桶内垃圾高度的需求&#xff0c;特别是面对桶内积水、沙尘等复杂工况&#xff0c;以及对小盲区、高精度的严苛要求&#xff0c;大禹电子凭借…...

在ARM架构Windows上,用Hyper-V快速部署Ubuntu Server 22.04 LTS

1. 为什么选择ARM架构WindowsHyper-V跑Ubuntu&#xff1f; 最近两年ARM架构的Windows设备越来越多了&#xff0c;像Surface Pro X这样的设备用起来确实轻便省电。但很多开发者发现&#xff0c;想在ARM电脑上跑个Linux环境测试代码&#xff0c;总会遇到各种兼容性问题。我自己用…...