【发布时间】:2013-02-17 00:15:00
【问题描述】:
我尝试使用负索引来索引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类型,而这个类型对于vector来说是unsigned int,所以编译器应该从int(的类型index 变量)到unsigned int。由于上例中index的值为-1,所以隐式转换的index为4294967295(即unsigned int类型的最大值):这个值被传递给vector::at()成员函数,这会引发 out_of_range 异常。
也就是说,这个异常不是因为vector::at()成员函数看到index小于零,而是因为隐式转换的index大于vector的当前大小.这是正确的解释吗?
【问题讨论】:
-
是的,这是正确的解释。
标签: c++ type-conversion implicit-conversion