我目前有一个枚举的代码,其中设置了一个值,其余的由编译器使用前一个值+1设置,或者我希望如此。
此功能是否依赖于枚举类型编译器,下面的示例如下所示。
enum FUNC_ERROR_CODE
{
FUNC_SUCCESS,
FUNC_ERROR_1 = 24,
FUNC_ERROR_2,
FUNC_ERROR_3
}
可以安全地假设FUNC_ERROR_2的值为25,而FUNC_ERROR_3的值为26,无论使用的编译器如何。
我正在对此进行编码,因为函数可以返回一个整数值,0总是成功,任何其他值都可以表示失败。
答案 0 :(得分:6)
可以安全地假设:
枚举器列表中的标识符声明为常量,并且可以出现在常量的任何位置 需要。带=的枚举器定义为关联的枚举器提供由...指示的值 常量表达式。常量表达式应为整数或枚举类型。 如果是第一个 枚举器没有初始化器,相应常量的值为零。枚举器定义 没有初始值设定项为枚举数提供通过将上一个枚举数的值增加一个 获得的值。
但如果您有类型安全枚举:使用!不要回归转换成整数。
答案 1 :(得分:1)
恕我直言,如果您的枚举必须具有固定值,然后明确地修复这些值,您将确定枚举中包含的值。
但是如果你只需要比较你的枚举,让编译器为你做。
写一些像if FUNC_ERROR_2 > FUNC_ERROR_1 ...
答案 2 :(得分:1)
就Visual Studio 2010而言,它是安全的。请查看msdn中的以下示例:
“列表中的任何枚举器(包括第一个)都可以初始化为默认值以外的值。假设Suit的声明如下:
enum Suit {
Diamonds = 5,
Hearts,
Clubs = 4,
Spades
};
然后,钻石,心形,俱乐部和黑桃的价值分别为 5,6,4和5 。请注意,5不止一次使用。“
答案 3 :(得分:0)
我很确定编译器被强制为每个新值递增。