C++: Signed/unsigned mismatch when only using unsigned types

Когда я пытаюсь скомпилировать следующую программу на 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

не вызывает такого предупреждения, вероятно, это связано с каким-то странным неявным разговором, который происходит здесь.

Итак: по какой причине я получаю это предупреждение и по каким правилам происходит этот разговор (если причина в этом)?

5
задан Nubok 19 December 2011 в 19:06
поделиться