通过int转换将枚举转换为不同的枚举是否有效,如下图所示? 看起来像x64的gcc没有问题,但它是否可以与其他编译器和平台一起期待呢?
当a
等于A_third
并且在enum_B
中没有等效内容时会发生什么?
enum enum_A {
A_first = 0,
A_second,
A_third
};
enum enum_B {
B_first = 0,
B_second
};
enum_A a = A_first;
enum_B b;
b = enum_B(int(a));
答案 0 :(得分:3)
由于某些边缘情况,您在执行此操作时必须小心:
来自C ++ 11标准(§7.2,6):
对于其基础类型未修复的枚举,基础 type是一个整数类型,可以表示所有枚举器值 在枚举中定义。如果没有整数类型可以代表所有 枚举值,枚举是不正确的。它是 实现定义的哪个整数类型用作底层 除了底层类型不应大于int之外的类型 除非枚举器的值不能适合int或unsigned 中间体
这意味着enum
的类型可能比int
更大,因此从enum
到int
的转换可以失败,结果不确定。
根据上述内容, 可以将int
转换为enum
,从而导致enum
未明确指定的枚举值。非正式地,您可以将enum
视为一个整数类型,其中一些值使用标签明确定义。