警告レベル/W4を有効にしてVisualStudio2010 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
そのような警告は発生しません。おそらく、ここで発生する奇妙な暗黙の会話と関係があります。
したがって、この警告が表示される理由は何ですか?また、この会話はどのようなルールで発生しますか(これが理由である場合)?