VC ++: Почему сравнение int32_t с uint64_t требует более высокого уровня предупреждения, чем сравнение с uint32_t? - PullRequest
2 голосов
/ 28 марта 2019
auto negativeOneAsInt32 = -1i32;

auto zeroAsUint32 = 0ui32;
auto result1 = negativeOneAsInt32 < zeroAsUint32; // C4018
// result1 is "unexpectedly" false due to conversion to unsigned    
// Warned with "C4018 '<': signed/unsigned mismatch" at /W3 or higher

auto zeroAsUint64 = 0ui64;
auto result2 = negativeOneAsInt32 < zeroAsUint64; // C4388
// result2 is "unexpectedly" false due to conversion to unsigned    
// Only warned with "C4388 '<': signed/unsigned mismatch" at /Wall

Оба сравнения содержат одну и ту же ошибку по одной и той же причине, но компилятор VC ++ предупреждает только о втором в / Wall, в то время как он предупреждает о первом в / W3 (то же самое сообщение каждый раз, но с разными кодами предупреждений). Есть ли конкретная причина для использования двух разных кодов и уровней предупреждения для того, что кажется одной и той же проблемой?

...