我尝试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
。这是一个正确的解释吗?