vector
負のインデックスを使用してインデックスを作成しようとしました。メンバー関数はvector::at()
、指定されたインデックスがベクトルの範囲内にあるかどうかをチェックし、これが発生しない場合は、out_of_range
例外がスローされます。
vector<float> array; // sample vector
array.push_back(0.123);
array.push_back(1.234);
array.push_back(2.345);
array.push_back(3.456);
array.push_back(4.567);
int index = -1;
float f = array.at(index);
cout << f << endl;
メンバー関数のシグニチャではvector::at()
、指定されたパラメータがvector<T>::size_type
型であり、この型がunsigned int
ベクトル用である必要があるため、コンパイラはint
(index
変数の型)から。への暗黙的な変換を実行する必要がありますunsigned int
。index
値は上記の例にあるため-1
、暗黙的に変換されindex
ます4294967295
(つまり、unsigned int
型の最大値)。この値はメンバー関数に渡され、例外vector::at()
がスローされます。out_of_range
つまり、この例外がスローされるのは、vector::at()
メンバー関数がindex
がゼロ未満であることを認識しているためではなく、暗黙的に変換されたindex
がの現在のサイズよりも大きいためvector
です。これは正しい説明ですか?