枚举值需要多少位?

时间:2016-02-23 12:25:03

标签: c++11

#include <stdint.h>

enum state : uint8_t {
    NONE,
    USA,
    CAN,
    MEX
};

struct X {
    state st : 2;  // compiles with uint8_t st : 2
};

Clang 3.9.0编译成功。

GCC 4.8.4和5.3.0抱怨:

warning: ‘X::st’ is too small to hold all values of ‘enum state’

谁是对的?

1 个答案:

答案 0 :(得分:1)

<强> TL; DR

两者都是正确的。

枚举的值受基础类型的限制,枚举器

C ++ 14,7.2枚举声明,第8段:

  

可以定义一个枚举,该枚举的值不是由任何枚举器定义的。

这意味着可以:

state x = static_cast< state >(5);

这就是GCC警告你的问题:enum state可能有不适合2位的值。

但是,只要您不尝试 X::st,一切都很闪亮。

那可能是为什么Clang 警告你。

由于标准不要求任何一种诊断方法,警告或没有警告你没有错。