在C ++中通过int将枚举转换为枚举

时间:2014-12-12 11:38:32

标签: c++ enums

通过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)); 

1 个答案:

答案 0 :(得分:3)

由于某些边缘情况,您在执行此操作时必须小心:

来自C ++ 11标准(§7.2,6):

  

对于其基础类型未修复的枚举,基础   type是一个整数类型,可以表示所有枚举器值   在枚举中定义。如果没有整数类型可以代表所有   枚举值,枚举是不正确的。它是   实现定义的哪个整数类型用作底层   除了底层类型不应大于int之外的类型   除非枚举器的值不能适合int或unsigned   中间体

这意味着enum的类型可能比int更大,因此从enumint 的转换可以失败,结果不确定。

根据上述内容, 可以将int转换为enum,从而导致enum未明确指定的枚举值。非正式地,您可以将enum视为一个整数类型,其中一些值使用标签明确定义。