将值分配给枚举

Pat*_*ick 4 c++ enums visual-studio-2010

在回顾一些旧的代码时,我注意到以下两个使用enum的奇怪结构(两个不同的文件/类/命名空间,只是将它们放在一起):

enum FirstEnum
   {
    A_CHOICE
   ,ANOTHER_CHOICE=1
   ,YET_SOME_OTHER_CHOICE
   };

enum SecondEnum
   {
    FIRST_CHOICE
   ,SECOND_CHOICE
   ,THIRD_CHOICE
   ,DEFAULT_CHOICE=SECOND_CHOICE
   };
Run Code Online (Sandbox Code Playgroud)

我认为这两种结构都是错误的.

第一个为其中一个选项赋值,但不为其他选项赋值,这意味着如果添加新选项,事情可能会出错.

在第二种情况下,我们最终得到两个具有相同基础值的枚举元素.

有没有理由说C++标准允许这两种结构?

(使用Visual Studio 2010)

Mik*_*our 5

第一个为其中一个选项赋值,但不为其他选项赋值,这意味着如果添加新选项,事情可能会出错.

我不知道你的意思是"出错".它定义明确,如果你没有为枚举器指定一个值,它的值比前一个值多一个(或者如果它是第一个则为零).

在第二种情况下,我们最终得到两个具有相同基础值的枚举元素.

是的我们做到了.如果枚举应该是一组唯一值,但是(在C++中)它们不是,那将是错误的.

有没有理由说C++标准允许这两种结构?

因为,在C++中,枚举只是一种声明一组相关的,命名的常量值的方法.它并不试图限制它们可以采取的值.