MSVC が警告なしで符号付き/符号なしの等価比較を受け入れる理由
比較演算子における符号付き/符号なしの不一致の厳密な処理にもかかわらず、Microsoft Visual C (MSVC) は予期せず、符号付き型と符号なし型の間の等価性を許容します。この動作は、基礎となる変換ルールから発生します。
整数昇格と符号付き/符号なし変換
比較中、MSVC は C 標準 5/9 で概説されている整数昇格ルールに従います。 。一方のオペランドが符号付きで、もう一方のオペランドが符号なしの場合、符号付きオペランドは符号なしに変換されます。
等価性の場合、この変換は結果に影響しません: -1 == (符号なし) -1。ただし、他の比較演算子の場合は重要です。 -1 > -1 は符号なしの値に変換されるため、2U は true です。
MSVC の警告レベルと符号付き/符号なしの比較
MSVC の警告レベルにより、どの符号付き/符号なしの不一致によって警告がトリガーされるかが決まります。 。開発者は、等価性と大きい/小さい比較に関して特定の選択を行いました:
このアプローチは、符号付き/符号なし型を含む等価比較は多くの場合意図的であり、混合型との大小比較は行われないという開発者の見解を反映しています。
結論として、MSVC が符号付き/符号なしの等価比較を黙って受け入れているのは、整数プロモーション ルールに由来しています。およびそのようなシナリオに対するコンパイラーの特定の警告構成。
以上がMSVC が符号付き/符号なしの等価比較について警告しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。