首頁 >後端開發 >C++ >為什麼 C 不會拋出整數被零除的異常?

為什麼 C 不會拋出整數被零除的異常?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 08:03:14121瀏覽

Why Doesn't C   Throw an Exception for Integer Divide-by-Zero?

捕獲除零異常

儘管嘗試使用try/catch 區塊捕獲異常,但以下程式碼莫名其妙地繞過了除以時的異常零:

int i = 0;

cin >> i; // input validation not present

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}

C 中的異常處理

與預期相反,整數除以零並不是標準 C 中的內建異常。對於浮點除以零/餘數也是如此,儘管在這種情況下,可能會產生 NaN/Inf 等特定有理值。

ISO C 20 標準中定義的例外清單包括:

logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error

雖然可以使用overflow_error或domain_error來表示被零除,但標準明確指出該行為在這種情況下是未定義的

自訂異常處理

如果需要除零異常,可以手動實現。以下範例使用intDivEx 函數來除以異常處理:

inline int intDivEx (int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}

使用此函數的輸出演示了異常被拋出和捕獲,在除以的情況下保持原始變量不變-零:

i = intDivEx(10, 0); // throws exception

i = intDivEx(10, 2); // returns 5

以上是為什麼 C 不會拋出整數被零除的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn