ac 枚举的基础类型是什么?

新手上路,请多包涵

这可能已在其他地方得到回答,但我找不到合适的回应。

我有这个代码:

 enum enumWizardPage
{
    WP_NONE = 0x00,
    WP_CMDID = 0x01,
    WP_LEAGUES = 0x02,
    WP_TEAMS = 0x04,
    WP_COMP = 0x08,
    WP_DIVISIONS = 0x10,
    WP_FORMULAS = 0x20,
    WP_FINISHED = 0x40,
};

这是遗留问题,我必须通过添加一些新值来修改它。问题是每个值都必须是唯一的位,因此可以将它们或组合成位图。

这些值是使用 #x## 十六进制格式设置的,但我想知道这是否是它可以存储的最大值?如果我将代码更改为

enum enumWizardPage
{
    WP_NONE = 0x0000,
    WP_CMDID = 0x0001,
    WP_LEAGUES = 0x0002,
    WP_TEAMS = 0x0004,
    WP_COMP = 0x0008,
    WP_DIVISIONS = 0x0010,
    WP_FORMULAS = 0x0020,
    WP_FINISHED = 0x0040,
};

原文由 CodeFusionMobile 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 693
2 个回答

N4659 C++ 7.25 开始

对于底层类型不固定的枚举,底层类型是一个整数类型,可以表示枚举中定义的所有枚举值。如果没有整数类型可以表示所有枚举数值,则枚举格式错误。使用哪种整数类型作为基础类型由实现定义,除非基础类型不得大于 int 除非枚举数的值不能放入 intunsigned int 。如果 enumerator-list 为空,则基础类型就好像枚举有一个值为 0 的单个枚举器。

原文由 Kirill V. Lyadvinsky 发布,翻译遵循 CC BY-SA 4.0 许可协议

C++ 枚举的类型是枚举本身。它的范围相当随意,但实际上,它的基础类型是 int

但是,无论在哪里使用,它都会隐式转换为 int

C++11 变化

自 C++11 引入类型化枚举以来,这种情况发生了变化。无类型的 enum 现在被定义为至少是 int 的宽度(如果需要更大的值,则更宽)。但是,给定一个类型为 enum 的定义如下:

 enum name : type {};

类型 name 的枚举具有 type 的基础类型。例如, enum : char 定义了一个 enumchar 宽度相同,而不是 int

此外,一个 enum 可以明确限定范围如下:

 enum class name : type {
    value = 0,
    // ...
};

(其中 name 是必需的,但 type 是可选的。) enum 以这种方式声明将不再 static_cast<> 隐式转换为其基础类型(需要 --- ) 并且必须使用完全限定名称引用值。在此示例中,要将 value enum 变量,您必须将其称为 name::value

原文由 greyfade 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题