Cod*_*ile 37 c++ size enums hex types
这可能已在其他地方得到解答,但我找不到合适的答案.
我有这个代码:
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,
};
Run Code Online (Sandbox Code Playgroud)
哪个是遗产,我必须通过添加一些新值来修改它.问题是每个值必须是唯一的位,因此它们可以组合成位图.
这些值是使用#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,
};
Run Code Online (Sandbox Code Playgroud)
gre*_*ade 45
C++枚举的类型是枚举本身.它的范围相当随意,但实际上,它的基本类型是int.
不过,它被隐式地投射到了int它所使用的任何地方.
自从引入类型枚举的C++ 11以来,这已经发生了变化.enum现在将无类型定义为至少宽度int(如果需要更大的值则更宽).但是,给定一个类型enum定义如下:
enum name : type {};
Run Code Online (Sandbox Code Playgroud)
类型的枚举name具有基础类型type.例如,enum : char定义enum相同的宽度char而不是int.
此外,enum可以明确地确定范围如下:
enum class name : type {
value = 0,
// ...
};
Run Code Online (Sandbox Code Playgroud)
(name需要的地方,但是type是可选的.)以enum这种方式声明将不再隐式地转换为其基础类型(需要a static_cast<>),并且必须使用完全限定名称引用值.在此示例中,要分配value给enum变量,必须将其引用为name::value.
Kir*_*sky 39
从标准C++ 7.2/5:
枚举的基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值.它是实现定义的,其中整数类型用作枚举的基础类型,除了基础类型不应大于int,除非枚举器的值不能适合int或unsigned int.如果枚举器列表为空,则基础类型就好像枚举具有值为0的单个枚举器.应用于枚举类型,枚举类型的对象或枚举器的sizeof()的值是sizeof()的值应用于基础类型.