C++11之enum

C++11加强了enum类型,推出了强类型的enum,语法格式为

enum class E : T
{
    __VA_ARGS__,
};

在此之前C++的enum继承自C,只能说是弱鸡,比如:
1. 同作用域下,两个不同枚举空间中的值如果取相同的名称将会冲突.
2. 存在隐式转换,通常情况下两种不同枚举是没有比较的意义的,但由于默认C风格底层为int型enum,则可以相互比较.
3. C中的枚举如果数值越界,也不会报错,转换之后存在数据丢失的风险.

而使用C++11中强化了的enum,其改变有:
1. 强化了作用域,使用时必须指定enum的名称,因此不用担心枚举中值名称重复.

enum class cycle{red,black,white};
enum class car{red,black,white};
  1. 不可隐式转换.即不同的枚举空间的值不可相互比较.
  2. 可以指定底层类型,因此既可以节约空间,又可以指定符号.
enum class cycle:char{red=0,black=3,white};
enum class car:short{red=-2,black,white};