《c++语言导学》——2.5 枚举

简介:

本节书摘来自华章计算机《c++语言导学》一书中的第2章,第2.5节,[美] 本贾尼·斯特劳斯特卢普 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
本节书摘来自华章计算机《c++语言导学》一书中的第2章,第2.5节,[美] 本贾尼·斯特劳斯特卢普 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 枚举

除了类之外,C++还提供了另一种形式简单的用户自定义类型,使得我们可以枚举一系列值:


2505562518f9723926f212860a3a0b69bd09db85

其中,枚举值(如red)位于其enum class的作用域之内,因此我们可以在不同的enum class中重复使用这些枚举值而不致引起混淆。例如,Color::red是指Color的red值,它与Traffic_light::red显然不同。
枚举类型常用于描述规模较小的整数值集合。通过使用有指代意义(且易于记忆)的枚举值名字,可以提高代码的可读性,降低出错的风险。
enum后面的class关键字指明了枚举是强类型的,且它的枚举值位于指定的作用域中。不同的enum class是不同的类型,这有助于防止对常量的意外误用。在上面的例子中,我们不能混用Traffic_light和Color的值:

d81be00788bc98f769907de3dda756e50dce3988

同样,我们也不能隐式地混用Color和整数值:

5016b00e4ffb8722bdaf4dd861e4e01ee88cf477

默认情况下,enum class只定义了赋值、初始化和比较(如==和<,见1.5节)操作。然而,既然枚举类型是一种用户自定义类型,那么我们就可以为它定义别的运算符:


<a href=https://yqfile.alicdn.com/c38adf467282eb178ffb53adc810bf98ae4a91e5.png
" >

如果你不想显式地限定枚举值名字,并且希望枚举值可以是int(无需显式转换),则应该去掉enum class中的class而得到一个“普通”enum。“普通”enum当中枚举值的作用域与其enum定义所处的作用域一致,并且会隐式地转换成整数值。例如:


9c1a8916422908249c5d94e9dc90399f838a3074

在这里,col的值是1。默认情况下枚举值对应的整数从0开始,依次加1。“普通”enum很早就用在C++和C的程序中了,所以即使它的效果并非最优,时至今日仍被很多人使用。

相关文章
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
273 2
|
6月前
|
C语言 C++
【实战指南】 C/C++ 枚举转字符串实现
本文介绍了在C/C++中实现枚举转字符串的实用技巧,通过宏定义与统一管理枚举名,提升代码调试效率并减少维护错误。
427 64
|
10月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
297 15
|
5月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
522 12
|
10月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
235 8
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
282 0
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
351 5
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
175 0
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
128 0
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1
175 0