[英]C++ vector exception handling: Which one is the better way of throwing out_of_range() and why?
我想知道以下哪種方式在out_of_range()
錯誤上out_of_range()
用戶定義的異常是一種更好的方法。 對我來說,作為一個沒有那么經驗的人,他們是相同的。 但是我很好奇,想知道兩者之間是否有區別,如果有,什么。
std::vector<int> container {1, 2, 3, 4, 5};
int function1(int x, int y) {
if(x < 0 || y < 0)
throw USER_DEFINED_OUT_OF_RANGE();
if(x >= container.size() || y >= container.size())
throw USER_DEFINED_OUT_OF_RANGE();
return container[x] + container[y];
}
int function2(int x, int y) {
try {
return container[x] + container[y];
}
catch(const std::out_of_range& e) {
throw USER_DEFINED_OUT_OF_RANGE();
}
}
第一個有效,第二個無效。 所以第一個更好。
(如果x
超出范圍, container[x]
是未定義的行為,則不會拋出該異常。您可以使用at()
NeilButterworth建議使用at()
來解決此問題。)
但是您錯過了更大的要點-您根本不應該這樣做。 在這種情況下有一個非常好的標准例外,將其轉換為其他內容不會幫助任何人。
如果索引超出范圍,向量將引發異常。 采用:
container.at(x) + container.at(y)
或者在您的文檔中說使用無效索引的結果是不確定的,根本不做任何檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.