我试图使用负向索引来索引vector
。所述vector::at()
成员函数检查指定索引是否是向量的边界内,并且如果这种情况不会发生,一个out_of_range
则抛出异常。索引负向索引的std ::向量
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
的当前大小越大。这是一个正确的解释吗?
是的,基本上。 – Dave 2013-03-02 14:35:40
是的,这是正确的解释。 – syam 2013-03-02 14:35:43