带有枚举解释的隐式非运算符(!)?
Implicit not operator (!) with enums explanation?
我最近看到了这段代码,我想知道它为什么有效。枚举声明:
enum BuildResult {
RESULT_ERROR,
RESULT_SUCCESS
};
稍后,此枚举用于 if 语句(忽略它可以改为 RESULT_ERROR
的事实):
if (!objectHere->build_result == ClassNameHere::RESULT_SUCCESS)
我不知道您可以使用非运算符 !
翻转枚举的值。这是否仅适用于具有两种状态的枚举?是否有其他类型的隐式运算符可以与枚举一起使用?我确实找到了 this question 关于手动声明运算符的内容,但它似乎没有提到枚举的任何隐式运算符。
enum
隐式转换为 bool
。当你翻转它时,它不再是一个 enum
类型,而是一个 boolean pr-value.
如果您将 enum
替换为类型安全的 enum class
,则此转换不再可能。
当使用简单的枚举声明时,enum
右值的行为与整数完全一样。您甚至可以指定整数的类型:
enum myEnum : uint32_t { NOT, TYPE, SAFE };
(注意枚举的隐式值:{NOT=0, TYPE=1, SAFE=2}
)
我最近看到了这段代码,我想知道它为什么有效。枚举声明:
enum BuildResult {
RESULT_ERROR,
RESULT_SUCCESS
};
稍后,此枚举用于 if 语句(忽略它可以改为 RESULT_ERROR
的事实):
if (!objectHere->build_result == ClassNameHere::RESULT_SUCCESS)
我不知道您可以使用非运算符 !
翻转枚举的值。这是否仅适用于具有两种状态的枚举?是否有其他类型的隐式运算符可以与枚举一起使用?我确实找到了 this question 关于手动声明运算符的内容,但它似乎没有提到枚举的任何隐式运算符。
enum
隐式转换为 bool
。当你翻转它时,它不再是一个 enum
类型,而是一个 boolean pr-value.
如果您将 enum
替换为类型安全的 enum class
,则此转换不再可能。
当使用简单的枚举声明时,enum
右值的行为与整数完全一样。您甚至可以指定整数的类型:
enum myEnum : uint32_t { NOT, TYPE, SAFE };
(注意枚举的隐式值:{NOT=0, TYPE=1, SAFE=2}
)