簡體   English   中英

為什么我在std :: vector中使用索引超出范圍的operator []時沒有異常?

[英]Why I don't get an exception when using operator [] with index out of range in std::vector?

為什么當我使用下面的代碼時,我沒有超出范圍異常?

std::vector<int> v;
v.resize(12);
int t;
try {
    t = v[12];
} catch(std::exception  e){
    std::cout<<"error:"<<e.what()<<"\n";
}

通過使用operator[]你基本上是在告訴編譯器“我知道我在做什么。相信我。” 如果你訪問一些在數組之外的元素,那就是你的錯。 你違背了這種信任; 你不知道你在做什么。

另一種方法是使用at()方法。 在這里,您要求編譯器對您的訪問進行健全性檢查。 如果他們超出界限,你會得到一個例外。

這種健全性檢查可能很昂貴,特別是如果它是在一些深度嵌套的循環中完成的。 如果您知道指數將始終處於界限內,則沒有理由進行這些健全性檢查。 有一個不做那些健全性檢查的界面真好。

使operator[]成為不執行檢查的原因是因為這正是[]對原始數組和指針的作用。 在C / C ++中沒有用於訪問原始數組/指針的健全性檢查。 如果需要,檢查是否負擔。

operator[]不會拋出異常。 對該行為使用at()函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM