隐式不是带有枚举解释的运算符 (!)?

Implicit not operator (!) with enums explanation?

本文关键字:运算符 解释 枚举      更新时间:2023-10-16

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

enum BuildResult {
RESULT_ERROR,
RESULT_SUCCESS
};

稍后,这个枚举被用于 if 语句中(忽略它可能被RESULT_ERROR的事实(:

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

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

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

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

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

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

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