C++ 带枚举解释的隐式not运算符(!)?

C++ 带枚举解释的隐式not运算符(!)?,c++,enums,operators,C++,Enums,Operators,我最近遇到了这段代码,我想知道为什么它能工作。枚举声明: enum BuildResult { RESULT_ERROR, RESULT_SUCCESS }; 稍后,在if语句中使用此枚举(忽略它可能是RESULT\u ERROR): 我不知道您可以使用not运算符翻转枚举的值。这是否仅适用于具有两种状态的枚举?还有其他类型的隐式运算符可以与枚举一起使用吗?我确实找到了关于手动声明运算符的内容,但它似乎没有提到枚举的任何隐式运算符。枚举的enum隐式强制转换为bool。翻转它时

我最近遇到了这段代码,我想知道为什么它能工作。枚举声明:

enum BuildResult {
    RESULT_ERROR,
    RESULT_SUCCESS
};
稍后,在if语句中使用此枚举(忽略它可能是
RESULT\u ERROR
):


我不知道您可以使用not运算符
翻转枚举的值。这是否仅适用于具有两种状态的枚举?还有其他类型的隐式运算符可以与枚举一起使用吗?我确实找到了关于手动声明运算符的内容,但它似乎没有提到枚举的任何隐式运算符。

枚举的
enum
隐式强制转换为
bool
。翻转它时,它不再是
enum
类型,而是布尔pr值

如果将
enum
替换为类型安全的
enum类
,则无法再进行此转换

使用简单枚举声明时,
enum
r值的行为与整数完全相同。您甚至可以指定整数的类型:

enum myEnum : uint32_t { NOT, TYPE, SAFE };

(注意枚举的隐式值:
{NOT=0,TYPE=1,SAFE=2}

扩展答案:这实际上适用于具有两个以上状态的枚举。在普通枚举中,每个值都对应一个整数值。在这种情况下,RESULT_ERROR为0,RESULT_SUCCESS为1。由于存在从int到bool的隐式转换,因此这也适用于所有其他运算符。您可以在布尔运算中使用数学运算符和逻辑运算符。但是对于两个以上的状态,它们没有多大意义,因为除了定义为0的状态之外,其他所有状态都将计算为true。
enum myEnum : uint32_t { NOT, TYPE, SAFE };