ホームページ >バックエンド開発 >C++ >MSVC が符号付き/符号なし整数の等価比較について警告しないのはなぜですか?

MSVC が符号付き/符号なし整数の等価比較について警告しないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 07:18:21646ブラウズ

Why Doesn't MSVC Warn About Signed/Unsigned Integer Equality Comparisons?

MSVC の符号付き/符号なし整数比較に関する警告

次のコードは、なぜ MSVC が符号付き (int) と符号付き (int) と符号なし整数の等価比較に対して警告を発行しないのかという疑問を引き起こします。符号なし (符号なし 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。