本节书摘来自华章计算机《c++语言导学》一书中的第2章,第2.5节,[美] 本贾尼·斯特劳斯特卢普 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
本节书摘来自华章计算机《c++语言导学》一书中的第2章,第2.5节,[美] 本贾尼·斯特劳斯特卢普 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.5 枚举
除了类之外,C++还提供了另一种形式简单的用户自定义类型,使得我们可以枚举一系列值:
其中,枚举值(如red)位于其enum class的作用域之内,因此我们可以在不同的enum class中重复使用这些枚举值而不致引起混淆。例如,Color::red是指Color的red值,它与Traffic_light::red显然不同。
枚举类型常用于描述规模较小的整数值集合。通过使用有指代意义(且易于记忆)的枚举值名字,可以提高代码的可读性,降低出错的风险。
enum后面的class关键字指明了枚举是强类型的,且它的枚举值位于指定的作用域中。不同的enum class是不同的类型,这有助于防止对常量的意外误用。在上面的例子中,我们不能混用Traffic_light和Color的值:
同样,我们也不能隐式地混用Color和整数值:
默认情况下,enum class只定义了赋值、初始化和比较(如==和<,见1.5节)操作。然而,既然枚举类型是一种用户自定义类型,那么我们就可以为它定义别的运算符:
https://yqfile.alicdn.com/c38adf467282eb178ffb53adc810bf98ae4a91e5.png
" >
如果你不想显式地限定枚举值名字,并且希望枚举值可以是int(无需显式转换),则应该去掉enum class中的class而得到一个“普通”enum。“普通”enum当中枚举值的作用域与其enum定义所处的作用域一致,并且会隐式地转换成整数值。例如:
在这里,col的值是1。默认情况下枚举值对应的整数从0开始,依次加1。“普通”enum很早就用在C++和C的程序中了,所以即使它的效果并非最优,时至今日仍被很多人使用。