C の空のベクトルとのベクトル サイズの不一致
次のコードを考えてみましょう:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
コードは 0 を出力します。最初の cout は、予想どおり空のベクトルを示しています。ただし、2 番目の cout では大きな正の数 (18446744073709551615) が出力されます。直感的に予想されるように、なぜ -1 ではないのでしょうか?
符号なし型について
この動作を理解するには、ベクトル サイズの型を考慮する必要があります。関数。 Vector::size() は、符号なしデータ型である size_t 値を返します。符号なしデータ型は正の数と 0 のみを表現できます。これらの型では負の数を表現できません。
空のベクトルのサイズから 1 を減算すると、期待どおり -1 の値が得られます。ただし、size_t は符号なしであるため、-1 値は、このデータ型が表現できる最大の正の値 (この場合は 18446744073709551615) にオーバーフローします。
したがって、2 番目の cout ステートメントは、このオーバーフローの結果を表示するのではなく、このオーバーフローの結果を表示します。予想される -1 値よりも大きくなっています。
以上がC で空のベクトルのサイズから 1 を引くと、-1 ではなく大きな正の数が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。