给出以下代码:
enum Options
{
Surf = 0x01,
Out = 0x02
};
Options all = (Options) ( Surf | Out);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,Options只定义了两个变量.值0x03如何有意义?
这个铸件有问题吗?
没有.
如果这个演员有意义,为什么呢?根据我的理解,Options只定义了两个变量,值0x03如何有意义?
枚举类型Options有两个命名的枚举器,但它表示的值范围足够大,可以用作包含每个枚举器的位域.
简而言之:是的,对于像这样的位域使用枚举是有效且定义良好的.
根据对此答案的评论的要求,允许这样的正式语言可以在C++标准(C++ 03 7.2/6)中找到:
对于枚举,其中e min是最小的枚举数且e max是最大的,枚举的值是b min到b max范围内的基础类型的值,其中b min和b max分别是最小的和最小位域的最大值,可以存储e min和e max.
可以定义具有未由其任何枚举器定义的值的枚举.
关于这是否是好风格存在争议.当然可以说,通常认为枚举对象只能存储其枚举器之一,因此这样的代码可能会让人感到困惑和容易出错.
另一方面,我认为当枚举用作位域时通常很明显.通常这样的枚举用Options或Flags后缀或类似的东西命名.同样,如果每个枚举器的设定值明显是单个设置位,则该枚举可能用作位域.