我尝试vector使用负索引来索引 a 。成员函数检查指定的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。这是一个正确的解释吗?