Когда я пытаюсь скомпилировать следующую программу C ++ с использованием компилятора Visual Studio 2010 C ++ (X86) с включенным уровнем предупреждения / W4, я получаю предупреждение о несоответствии со знаком / без знака в отмеченной строке.
#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
не вызывает такого предупреждения, оно, вероятно, связано с каким-то странным неявным разговором, который происходит здесь.
Таким образом: в чем причина, почему я получаю это предупреждение ипо каким правилам происходит этот разговор (если это причина)?