我在目前正在处理的代码中发现了这一点,并认为这是我遇到的一些问题的原因。
在某处的标题中:
enum SpecificIndexes{
//snip
INVALID_INDEX = -1
};
然后稍后 - 初始化:
nextIndex = INVALID_INDEX;
并使用
if(nextIndex != INVALID_INDEX)
{
//do stuff
}
调试代码,nextIndex 中的值不太有意义(它们非常大),我发现它被声明了:
unsigned int nextIndex;
因此,INVALID_INDEX 的初始设置使 unsigned int 下溢并将其设置为一个巨大的数字。我认为这是导致问题的原因,但仔细观察,测试
if(nextIndex != INVALID_INDEX)
行为正确,即当 nextIndex 为“大 +ve 值”时,它从未执行 if 的主体。
它是否正确?这是怎么回事?枚举值是否被隐式转换为与变量相同类型的无符号整数,因此以相同的方式包装?