ベクトル サイズの異常: Size() - 1 が空のベクトルの -1 ではない理由
指定されたコード スニペットは、次のような特異な動作を示しています。 C ベクトル。ベクトルが空の場合 (つまり、size() == 0)、そのサイズから 1 を引くと、予想される -1 ではなく、大きな正の数が返されます。
原因
この動作を理解する鍵は、vector::size() のデータ型にあります。これは、符号なし整数型の size_t として定義されます。符号付き整数とは異なり、符号なし整数は負の値を表すことができません。
2 番目の結果: 何が起こっていますか?
空のベクトルのサイズ (0) から 1 を引くとの場合、結果はオーバーフローし、符号なし整数の可能な最大値にラップアラウンドします。これは、符号なし整数は正の値を表すためにすべてのビットを使用し、オーバーフローすると 0 からやり直すためです。
例
コード例では、value .size() は 0 で、value.size() - 1 はオーバーフローします。 18446744073709551615、これは符号なし 64 ビット整数 (2^64 - 1) の最大値です。
以上が空の C ベクトルに対して「size() - 1」が大きな正の数を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。