我試圖使用負向索引來索引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