以下代码提出了一个问题,为什么 MSVC 不对有符号 (int) 和无符号(unsigned int)整数值:
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
根据 C 标准,当比较有符号和无符号整数,有符号值将转换为无符号值。此转换保留相等比较的值,因为 (-1 == -1) 和 ((unsigned)-1 == -1) 为 true。但是,对于其他比较运算符(如大于 (>) 或小于 ( 2U) 计算结果为 true。
MSVC 开发人员已针对这些不同运算符的警告级别做出了特定选择:
此方法可确保针对以下情况发出警告:转换可能导致令人惊讶的行为的场景,同时避免对维持预期结果的相等比较产生不必要的警告。
以上是为什么 MSVC 不对有符号/无符号整数相等比较发出警告?的详细内容。更多信息请关注PHP中文网其他相关文章!