当我尝试使用启用了警告级别 /W4 的 Visual Studio 2010 C++ 编译器 (X86) 编译以下 C++ 程序时,我在标记的行处收到有符号/无符号不匹配警告。
#include <cstdio>
#include <cstdint>
#include <cstddef>
int main(int argc, char **argv)
{
size_t idx = 42;
uint8_t bytesCount = 20;
// warning C4389: '==' : signed/unsigned mismatch
if (bytesCount + 1 == idx)
{
printf("Hello World\n");
}
// no warning
if (bytesCount == idx)
{
printf("Hello World\n");
}
}
这让我很困惑,因为我只使用无符号类型。由于比较
bytesCount == idx
没有引起这样的警告,它可能与这里发生的一些奇怪的隐含对话有关。
因此:我收到此警告的原因是什么以及此对话发生的规则是什么(如果这是原因)?