以下程式碼提出了一個問題,為什麼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中文網其他相關文章!