gpt4 book ai didi

C++ 枚举与 unsigned int 比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:36 24 4
gpt4 key购买 nike

我在目前正在处理的代码中发现了这一点,并认为这是我遇到的一些问题的原因。

在某处的标题中:

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 的主体。

这是正确的吗?这是怎么回事?枚举值是否被隐式转换为与变量类型相同的 unsigned int,并因此以相同的方式包装?

最佳答案

对一切都是肯定的。它是有效代码,也是常用的库端 C++ 代码,在现代 C++ 中更是如此(第一次看到它会很奇怪,但它在现实中是一种非常常见的模式)。

然后枚举是有符号整数,但它们被隐式转换为无符号整数,现在这取决于您的编译器可能会发出警告,但它仍然很常用,但是您应该显式转换以使维护者清楚。

关于C++ 枚举与 unsigned int 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com