C ++:捕獲除零錯誤這是一段簡單的代碼,其中除以零。我想抓住它:#include <iostream>int main(int argc, char *argv[]) {
int Dividend = 10;
int Divisor = 0;
try {
std::cout << Dividend / Divisor;
} catch(...) {
std::cout << "Error.";
}
return 0;}但是應用程序無論如何都會崩潰(即使我選擇-fexceptions了MinGW)。是否有可能捕獲到這樣的異常(我理解的不是C ++異常,而是FPU異常)?我知道我可以在分割之前檢查除數,但是我假設,因為除零是罕見的(至少在我的應用程序中),嘗試分割會更有效(并且如果它發生)而不是每次除數前的除數。我正在WindowsXP計算機上進行這些測試,但是想讓它跨平臺。
3 回答

慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
除以零是一個邏輯錯誤,程序員的錯誤。你不應該嘗試應對它,你應該調試并消除它。此外,捕獲異常是非常昂貴的 - 比分數檢查更多。
您可以使用結構化異常處理來捕獲除以零的錯誤。如何實現取決于您的編譯器。MSVC提供了一個捕獲結構化異常的函數,catch(...)
并且還提供了將結構化異常轉換為常規異常以及提供__try
/ __except
/的功能__finally
。但是我對MinGW不太熟悉,告訴你如何在該編譯器中完成它。

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
沒有一種語言標準的方法可以從CPU中捕獲零除零點。
不要過早“優化”一個分支。您的應用程序在此上下文中是否 真的受 CPU限制?我對此表示懷疑,如果你破壞你的代碼,它并不是真正的優化。否則,我可以讓你的代碼更快:
int main(int argc, char *argv[]) { /* Fastest program ever! */ }
添加回答
舉報
0/150
提交
取消