为什么 MSVC 接受有符号/无符号相等比较而不发出警告
尽管 Microsoft Visual C 严格处理比较运算符中的有符号/无符号不匹配,但(MSVC) 意外地容忍有符号和无符号类型之间的相等性。此行为是由底层转换规则引起的。
积分提升和有符号/无符号转换
在比较期间,MSVC 遵循 C 标准 5/9 中概述的积分提升规则。如果一个操作数有符号,另一个无符号,则有符号操作数将转换为无符号。
对于相等性,此转换不会影响结果:-1 == (无符号) -1。然而,对于其他比较运算符,它确实很重要:-1 > > 2U 为 true,因为 -1 转换为无符号值。
MSVC 警告级别和有符号/无符号比较
MSVC 的警告级别确定哪些有符号/无符号不匹配会触发警告。开发人员针对相等与更大/更少比较做出了具体选择:
以上是为什么 MSVC 不对有符号/无符号相等比较发出警告?的详细内容。更多信息请关注PHP中文网其他相关文章!