《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的程序中了,所以即使它的效果并非最优,时至今日仍被很多人使用。

相关文章
|
1月前
|
编译器 C++
C++语言预处理器学习应用案例
【4月更文挑战第8天】C++预处理器包括条件编译、宏定义和文件包含等功能。例如,条件编译用于根据平台选择不同代码实现,宏定义可简化常量和变量名,文件包含则用于整合多个源文件。示例中展示了如何使用`#ifdef`等指令进行条件编译,当`DEBUG`宏定义时,`PRINT_LOG`会打印调试信息,否则不执行。
14 1
|
2月前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
53 3
|
15天前
|
Linux 程序员 图形学
C++语言在现代软件开发中的应用与实践
C++语言在现代软件开发中的应用与实践
20 2
|
15天前
|
存储 程序员 C语言
深入理解C++:从语言特性到实践应用
深入理解C++:从语言特性到实践应用
24 3
|
15天前
|
存储 算法 安全
C++语言深度探索:从基础到实践
C++语言深度探索:从基础到实践
14 2
|
27天前
|
机器学习/深度学习 人工智能 大数据
开发语言漫谈-C++
C++最初的名字为“带类的C”
|
27天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
1月前
|
存储 C++
C++语言学习指针和引用应用案例
C++中的指针和引用用于高效操作内存。示例展示指针和引用的基本用法:指针`*p`存储变量`a`的地址,引用`&x`在函数调用中实现值交换而无需复制。此外,引用`update(&x)`可直接修改原变量,指针`p`在数组操作中用于遍历和访问不同部分。
12 2
|
1月前
|
C++
C++语言学习数组和字符串应用案例
【4月更文挑战第8天】该文展示了C++中数组和字符串的应用案例。数组示例定义了一个整数数组并访问、修改其元素,计算了元素之和。字符串示例中,定义了一个字符串并遍历、修改字符,进行了字符串拼接、查找子字符串及替换操作。
12 3
|
1月前
|
C++
C++语言学习文件操作应用案例
C++文件操作示例:创建`ofstream`对象写入&quot;Hello, World!&quot;到`output.txt`,刷新缓冲区,然后使用`ifstream`读取并打印文件内容。如果文件打开失败,程序将显示错误信息并返回1。
12 3