簡體   English   中英

C ++向量異常處理:哪一種是拋出out_of_range()的更好方法,為什么?

[英]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.

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