声明枚举类型的底层类型时不应使用 const 或 volatile
6.2.7 ID_uselessQualifier
在 C++ 语言中,将 enum 或 enum class 的底层类型(underlying type)设为 const 或 volatile 是没有意义的,会被编译器忽略。
枚举类型基于整数类型实现,故称枚举类型的底层类型为整数类型。enum 的底层类型在 C 和 C++ 语言中由实现定义,C++11 引入 enum class,并与 enum 一起均可显式声明底层类型,若未显式声明,enum class 的底层类型为 int,enum 的底层类型仍由实现定义。
示例:
enum E: const unsigned int // Non-compliant, ‘const’ is invalid
{
e0, e1, e2
};
E e = e0; // ‘e’ is not const
将例中 E 的底层类型声明为 const 是没有意义的,e 仍为变量。
应改为:
enum E: unsigned int // Compliant
{
e0, e1, e2
};
const E e = e0; // OK, ‘e’ is const
依据
ISO/IEC 14882:2011 7.2(2)
ISO/IEC 14882:2011 10.2(2)