枚举中的掩码[C++]

枚举中的掩码[C++],c++,enums,C++,Enums,我现在正在玩bits,正在查看io状态的microsoft代码,发现了如下内容: enum _Iostate { // constants for stream states _Statmask = 0x17};//What is this mask for??? static const _Iostate goodbit = (_Iostate)0x0; static const _Iostate eofbit = (_Iostate)0x1; static const

我现在正在玩bits,正在查看io状态的microsoft代码,发现了如下内容:

enum _Iostate
    {   // constants for stream states
    _Statmask = 0x17};//What is this mask for???

static const _Iostate goodbit = (_Iostate)0x0;
static const _Iostate eofbit = (_Iostate)0x1;
static const _Iostate failbit = (_Iostate)0x2;
static const _Iostate badbit = (_Iostate)0x4;
static const _Iostate _Hardfail = (_Iostate)0x10;
我只是想知道为什么这个掩码是用于,因为没有这个掩码的代码可以工作,没有这个掩码的值保持不变。
谢谢。

它确保_Iostate枚举具有正确的大小以容纳随后定义的所有位常量及其组合。

它确保_Iostate枚举具有正确的大小以容纳随后定义的所有位常量及其组合。

这是一个按位或所有可能的标志。您可以使用它从整数中的其他位提取包含标志的部分。

这是按位或所有可能标志的组合。你也许可以用它从整数的其他位中提取包含标志的部分。

他接受了一个答案,但我相信这个答案是正确的+1是的,这可能是更正确的答案。但这两个都没有错,我认为它们都解释了一个重要部分。例如,这个答案并不能解释为什么枚举数的定义与枚举之外的其他5个不同。他说代码没有这个掩码就可以工作,这意味着它没有使用,或者至少这是我的解释,但是我没有看过代码,我想他是说现有的代码在没有它的情况下可以工作,我认为没有理由将某些代码绑定到该常量。但是,如果一个人想将几个位掩码打包成一个整数,他可以使用这些常量来屏蔽diring解包和估计所需的位数。因为这些常量用于模板标准库流中,所以它在VC++中工作并不奇怪。他可能会收到一个错误,一旦调用某个函数,利用它可能是rdflags,fail,等等…他接受了一个答案,但我相信这个答案是正确的+1是的,这可能是更正确的答案。但这两个都没有错,我认为它们都解释了一个重要部分。例如,这个答案并不能解释为什么枚举数的定义与枚举之外的其他5个不同。他说代码没有这个掩码就可以工作,这意味着它没有使用,或者至少这是我的解释,但是我没有看过代码,我想他是说现有的代码在没有它的情况下可以工作,我认为没有理由将某些代码绑定到该常量。但是,如果一个人想将几个位掩码打包成一个整数,他可以使用这些常量来屏蔽diring解包和估计所需的位数。因为这些常量用于模板标准库流中,所以它在VC++中工作并不奇怪。一旦调用某个函数,他可能会收到一个错误,利用它可能是rdflags、fail等…+1。更准确地说,枚举的范围是可以存储在存储枚举的所有枚举数的最小可能位字段中的值的范围。在这种情况下,范围为0。。31.+1. 更准确地说,枚举的范围是可以存储在存储枚举的所有枚举数的最小可能位字段中的值的范围。在这种情况下,范围为0。。31