std::vector サイズ否定のパラドックス: 明らかに
不可解なプログラムで、-1
符号なし整数型について
std::vector の size メンバーは、符号なし整数型を返します。符号なし整数型は正の整数のみを表し、負の値を格納する機能がありません。符号なし型で負の値が検出されると、2 の補数変換として知られるプロセスを通じて、大きな正の値に自動的に変換されます。
比較における型昇格
比較では -1
説明例
次のコード スニペットは、基本型での同じ動作を示しています。
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints false }
この例では、符号付き整数 -1 は、比較される前に符号なし整数に昇格されます。 a.したがって、結果は false になります。
結論
要約すると、元の std::vector 比較で観察された不可解な動作は、次の場合に負の整数の型昇格から発生します。符号なし型と比較します。負の整数は実質的に大きな正の値に変換され、予期しない結果が生じます。ベスト プラクティスとして、符号付きの値を符号なしの型に明示的にキャストせずに、符号付き整数と符号なし整数を比較することは避けてください。
以上が`std::vector` に対して `-1 < a.size()` が False と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。