枚举依赖于整数布尔转换

Joh*_*itb 4 c++ enumeration boolean

在我的编译器项目中,我有一个类似的枚举

enum Result {
  No,
  Maybe,
  Yes
};
Run Code Online (Sandbox Code Playgroud)

No明确地把它放在第一个位置,这样我就可以依赖于布尔值false.如果我的编译器不确定某些东西,并且必须等待事实直到运行时,它的分析函数将返回Maybe.用过像

if(!typesEqual(t1, t2)) {
  diagnose(types_unequal) << t1 << t2;
}
Run Code Online (Sandbox Code Playgroud)

我想知道你或你的公司是否认为不No明确的比较风格

if(typesEqual(t1, t2) == No) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

明确地比较对我来说似乎很啰嗦,但依赖于隐式布尔转换会让我感到内疚.你以前有这种感觉,你是如何处理的?

EMP*_*EMP 5

我也对它感到内疚,因为通过阅读上面的代码你会期望布尔typesEqual()表达式返回Maybe什么?它会回归真的吗?也许!它会返回虚假吗?也许!我们不知道 - 这就是枚举的全部内容.这就是明确比较的原因No,即使它更冗长.