2016-12-15 60 views
1
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input[-1] <<endl; 

使用上面的代碼訪問向量的負折射率,其結果將是:在索引-1輸入是:0. 然而,如果我們使用follwoing:經由操作符[]和.AT()

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input.at(-1) <<endl; 

結果是: 在索引-1處的輸入是:libC++ abi.dylib:以std :: out_of_range:vector類型的未捕獲異常終止。

有人可以向我解釋原因嗎?謝謝。

回答

7

at成員進行範圍檢查並做出適當的迴應。

operator []沒有。這是未定義的行爲和代碼中的錯誤。

這是在文檔中明確說明的。

+0

你能告訴我什麼bug可以嗎?對於每個輸入矢量來說,當我使用operator []時,其-1處的索引始終爲0。 – Feng

+1

@FengZhou這是一個巧合,你在那個位置看到一個'0'。這仍然是一個非法的陳述。你正在向外看內容。你不允許看的內容包含一個「0」。 –

+0

謝謝。是的,我猜這是巧合。 – Feng

2

第一個是未定義的行爲。什麼事情都可能發生。無論發生什麼,你都不會抱怨。

第二,拋出一個異常,但你不抓住它,所以調用了std::terminate(),並且程序死亡。結束。