c++ - 为枚举赋值

标签 c++ visual-studio-2010 enums

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

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

enum SecondEnum
   {
    FIRST_CHOICE
   ,SECOND_CHOICE
   ,THIRD_CHOICE
   ,DEFAULT_CHOICE=SECOND_CHOICE
   };

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

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

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

C++ 标准允许这两种构造有什么原因吗?

(使用 Visual Studio 2010)

最佳答案

The first one assigns a value to one of the choices, but not to the others, meaning that things might go wrong if new choices are added.

我不知道你所说的“出错”是什么意思。明确定义的是,如果您不为枚举器指定值,则它的值比前一个多一个(或者零,如果它是第一个)。

In the second case, we end up with two enumeration elements having the same underlying value.

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

Is there any reason why the C++ standard allows both constructions?

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

关于c++ - 为枚举赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17699187/

相关文章:

xml - VS2010 有 xml 模式验证器吗?

Scala将字符串转换为带有值的枚举

c++ - 主要使用 C++ 绑定(bind)时如何提供 AffinityFunction.BackupFilter

C++计时: Get seconds with a precision of 3 decimal places

c# - 如何对图表数据点进行分组并为每个数据点的分组总和添加一个系列?

c++ - 在 Visual C++ IDE 的输出窗口中打印输出

c++ - 查询 GL_MAJOR_VERSION 抛出 "invalid enumerant"

c++ - 不能长疙瘩

enums - 使用 EBean 在数据库中存储枚举名称,而不是值

c# - 从枚举中填充复选框列表