捕獲除零異常
儘管嘗試使用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中文網其他相關文章!