c++ 枚举的底层类型是什么? [英] What is the underlying type of a c++ enum?

查看:39
本文介绍了c++ 枚举的底层类型是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能在别处得到了回答,但我找不到合适的回答.

This may have been answered elsewhere but I could not find a suitable response.

我有这个代码:

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, 
};

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

Which is legacy and I have to modify it by adding a few new values. The issue is each value must be a unique bit so they may be OR combined to a bitmap.

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

The values are set using the #x## hex format, but I'm wondering if this is the max it can store? What will be the effect, if any, if I change my code to

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,   
};

推荐答案

来自 N4659 C++ 7.2/5:

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

For an enumeration whose underlying type is not fixed, the underlying type is an integral type that can represent all the enumerator values defined in the enumeration. If no integral type can represent all the enumerator values, the enumeration is ill-formed. It is implementation-defined which integral type is used as the underlying type except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0.

这篇关于c++ 枚举的底层类型是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆