最佳答案
第一个链接 ( http://eel.is/c++draft/dcl.enum#1 ) 解释了 C++ 中的枚举类型是什么。这是 C++ 官方定义的地方。
另一个链接 ( http://eel.is/c++draft/enumerated.types ) 是关于 C++ 标准库的。此链接解释了如何阅读后续章节中的标准库的描述。
例如,第 29 章中有一个类型 ios_base::seekdir
的描述:
The type seekdir is an enumerated type (16.3.3.3.3) that contains the elements indicated in Table 120.
然后他们解释说有三个可能的值beg
,cur
end
。对于大多数想要使用第 29 章的库的人来说,这可能足够直观。但是由于此枚举类型是该库的公共(public)接口(interface)的一部分,其他人可能会认为,仅仅说存在三个可能的值是不够精确的。读者必须准确地知道返回 searchdir 的函数会产生什么结果。
因此,当您说“它是包含这些元素的枚举类型”时,您的第二个链接清楚地解释了它们的含义。
“枚举的同义词”一词意味着由枚举类型提供的完全相同的事物(相同的位和字节)也可以由其他类型提供。例如,如果您有一个函数返回一个枚举,其中 one=1、two=2、 Three=3,您可以随意将返回值视为该枚举类型的元素或仅视为整数。在库级别,对来自此类函数的位的两种解释没有区别。仅当您包含头文件时才会进行解释,其中函数及其返回类型都被精确定义。
第二个链接中不仅有枚举类型的定义,而且还有常量的定义,因为在库级别,枚举的各个元素(数字)不可见。在库级别,只有一个整数是可见的。但是当您想使用图书馆时,您必须了解各个图书馆的值(value)。为了实现这一点,该库将它们作为常量。
回到 seekdir
类型,通过第二个链接可以明确它将是这种类型:
enum enumerated { beg, cur, end };
inline const enumerated beg(beg);
inline const enumerated cur(cur);
inline const enumerated end(end);
通过这些内联常量,您可以在没有头文件的情况下找出枚举后面实际的数字。
关于c++ - C++ 中 "enumeration type"和 "enumerated type"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74295185/