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です。これは正しい説明ですか?