Hen*_*man 21
因为Flag枚举是位集合或选项集.
一个0值将是一部分的所有套,或根本没有.它只是行不通.
Eri*_*ert 18
为什么我永远不会在标志枚举中使用0?
这个问题是基于一个不正确的假设.您应该始终在标志枚举中使用零.它应始终设置为"无".
除了表示"没有设置任何标志"之外,你不应该使用它.
为什么不?
因为如果零具有除"无"之外的含义,它会变得非常混乱.一个人有一个合理的期望,((e & E.X) == E.X)意思是"X标志设置了吗?" 但如果X为零,则此表达式将始终为true,即使逻辑上该标志未设置为"set".
尽管零意味着没有设置任何位,但为 0 指定一个命名常量通常非常有用。
当我设置标志字时,我定义了位的名称,以便它们都代表非默认值。也就是说,枚举值始终初始化为零,从而“关闭”位字段表示的所有选项。
这为您的枚举提供了前向兼容性,以便任何创建新值的人都知道,如果您稍后向位字段添加更多标志,则任何零位都可以“安全”使用。
同样,组合多个标志来创建新的常量名称也非常有用,这使得代码更具可读性。
这样做的危险(以及您引用的规则的原因)只是您必须意识到单个位值(标志)与表示位组或位组合的值之间的差异。