August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
枚举(enumeration,简写为enum)是一种非常简单的用户自定义类型,它指定一个值的集合,这些值用符号常量表示,称为枚举量(enumerator)。下面是一个例子:
一个枚举定义的“体”就是一个简单的枚举量列表。enum class中的class表示枚举量在枚举作用域内,也就是说,必须用Month::jan来表示jan。
你可以为枚举量指定特定的值,就像上面代码为jan指定值一样。也可以不指定,让编译器选择合适的值。如果让编译器来选择值,它赋予每个枚举量的值为上一个枚举量的值加上1。因此,上面Month的定义赋予月份从1开始的连续整数。此定义与下面的定义是等价的:
但是,第二种定义一方面冗长乏味,另一方面容易出错。实际上,我们在输入第二个定义时出现了两个错误,经过修改后才得到上面的正确版本。因此,最好还是让编译器来做这种简单的、重复性的“机械性”工作。编译器比我们更擅长这种工作,而且它不会厌烦。
如果我们不初始化第一个枚举量,那么编译器会从0开始计数。例如:
这里monday==0,而sunday==6。在实践中,从0开始往往是一种好的选择。
我们可以像下面代码那样使用Month:
注意,Month是一个独立的类型,与“构成其基础”的int型不同。每个Month值都对应一个相等的整型值,但很多整型值没有相等的Month值。例如,我们肯定希望下面的初始化失败: ...