namespace ValueType {
enum Enum {
Boolean = 0,
Float = 1,
Double,
SInt = 8,
SLong,
UInt = SInt + (1 <<4),
ULong = SLong + (1 << 4)
};
}
回答
是的 - 要求是它是一个积分常量表达式。 C++标准包括以下示例:
enum { d, e, f=e+2 };
正如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
值。
可以理解且合乎逻辑,我不明白为什么有人会避免给出初始值。这样做会毫无意义地让你处于编译器实现的摆布之中。例如:在MSVC 2008中,E产生:E0(0),E1(-1),E2(0)。 – Geoff 2009-10-27 18:05:11
与所有这类行为一样,人们有时会认为编译器会做出明智的做法。当然,明智的是他们希望发生的事情。 – 2009-10-27 18:12:13
- 1. 当某些成员具有用户定义的值时枚举成员的值
- 2. 枚举成员
- 3. 演员枚举定义为string
- 4. 定义的std ::哈希类模板的枚举成员
- 5. 如何在枚举类型中定义枚举成员的映射?
- 6. 检查是否定义了枚举成员?
- 7. Excel VBA枚举类型说明:成员定义更改案例
- 8. 枚举结构的成员?
- 9. 查找未使用的枚举成员
- 10. Javascript类的成员在定义后未定义
- 11. 会员变成未定义
- 12. 由其他成员组成的枚举(标志)成员
- 13. 特殊成员枚举:全部和无
- 14. Python枚举类成员
- 15. 如何从枚举成员
- 16. 枚举和指向成员
- 17. 为什么有些人使用“无”作为枚举成员?
- 18. 如何为工会成员定义typedef
- 19. BuddyPress的:添加自定义组件成员部分
- 20. 使用自定义UserNamePasswordValidator或自定义成员资格提供
- 21. 作为夹具成员的自定义动作 - 谷歌测试
- 22. 未定义的成员函数参考
- 23. 成员的函数定义是什么?
- 24. “未定义” 参照++类成员用C
- 25. 枚举成员上的字符串化
- 26. c#LDAP的成员资格枚举
- 27. 枚举的联盟成员在C#
- 28. 得到的封闭型[枚举成员?]
- 29. 作为类成员的未定义大小的向量
- 30. 枚举类型'枚举'具有非文字初始值设定项的成员
我甚至不知道这是法律......整齐 – 2009-10-26 21:52:34
这不是真正的自我指涉。您有一些成员引用了以前定义的成员。这里的规则是正常的 - 一旦定义,它就是可见的。 – 2009-10-26 21:58:05
我更新了问题以反映您的观点。谢谢。 :) – Geoff 2009-10-26 22:11:39