enum
是用户定义的类型。一般来说,C 和 C++ 中的 enum
之间没有太大区别。 C++ 中的范围除外:如果某些 enum
在函数或类中声明,则无法在声明的函数/类之外访问它。这不适用于 C。
声明没有区别。
例如,可以如下声明新的 enum
(对于 C 和 C++):
enum newEnum { zero = 0, one, two, three };
定义新变量几乎没有区别。 要使用新定义的类型定义新变量,可以使用以下行:
enum newEnum varA = zero; // though allowed to skip enum keyword in C++
但有一点很有趣。
在 C++ 中,您不能添加两个 enum
值并将结果分配给 enum
类型的变量:
varA = one + zero; // won't compile in c++
这是可以解释的:enum
值可以转换为 int
值,但反之则不行(int
到 enum
)。所以在最后一个例子中,编译器不能将 sum 的结果(类型为 int
)分配给 varA(enum
newEnum),因为它不能转换 int
到 newEnum。
但是在 C 中是可能的:最后一行代码成功编译。这让我很困惑。
因此出现了一个问题:C 编译器如何处理 enum
?它甚至不是它的自定义类型吗?它只是 int
吗?
最佳答案
在 C 中,枚举常量(即值 0、1、2、3
)的类型为 int
。
enum newEnum
类型也存在,但枚举器没有该类型。 enum newEnum
类型是整数类型,编译器可以选择类型的大小,但它必须至少大到足以容纳所有已定义的枚举数。在您的示例中,它的大小可能是 1、2、4、8 或其他任何值。
可以有枚举类型的变量和值,例如枚举 newEnum x = 3;++x;
.
枚举类型根据其大小参与隐式整数转换。
关于c - C 编译器如何处理枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62437717/