不带枚举说明是否隐含运算符(!)?

时间:2018-10-06 05:58:48

标签: c++ enums operators

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

enum BuildResult {
    RESULT_ERROR,
    RESULT_SUCCESS
};

此后,此Enum在if语句中使用(忽略它可能是RESULT_ERROR的事实):

if (!objectHere->build_result == ClassNameHere::RESULT_SUCCESS)

我不知道您可以使用not运算符!来翻转Enum的值。这仅适用于具有两个状态的枚举吗?枚举还可以使用其他类型的隐式运算符吗?我确实发现了this question关于手动声明运算符的信息,但似乎没有提及枚举的任何隐式运算符。

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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