namespace ValueType {
enum Enum {
Boolean = 0,
Float = 1,
Double,
SInt = 8,
SLong,
UInt = SInt + (1 <<4),
ULong = SLong + (1 << 4)
};
}
答案 0 :(得分:12)
是 - 要求是它是一个完整的常量表达式。 C ++标准包括以下示例:
enum { d, e, f=e+2 };
答案 1 :(得分:1)
正如Jerry所指出的那样,这是合法的。
在一些罕见的情况下,它的发怒意识到只有在完全定义枚举之后才指定枚举器的类型。该标准说明了关于枚举类型的以下内容(7.2 / 4):
每个枚举定义一个与所有其他类型不同的类型。在enum-specifier的右括号之后,每个枚举器都有其枚举类型。在右大括号之前,每个枚举器的类型是其初始化值的类型。如果为枚举数指定了初始值设定项,则初始化值与表达式具有相同的类型。 如果没有为第一个枚举器指定初始值设定项,则类型为未指定的整数类型。否则,类型与前一个枚举器的初始化值的类型相同,除非递增的值在该类型中不可表示,在这种情况下,类型是一个未指定的整数类型,足以包含递增的值。
突出显示的句子可以在以下示例中显示:
enum E {
E0 // Unspecified type
, E1 = E0-1 // -1, or MAX_UINT
, E2 // 0 or (MAX_UINT+1)
};
基本上,为E0
选择的类型会影响E1
的结果值。