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

Read More