簡體   English   中英

如何捕獲此錯誤? [C ++]

[英]How to catch this error? [C++]

我試圖趕上零嘗試:

int _tmain(int argc, _TCHAR* argv[])
{
int a = 5;
try
{
int b = a / 0;
}
catch(const exception& e)
{
    cerr << e.what();
}
catch(...)
{
    cerr << "Unknown error.";
}
    cin.get();
return 0;
}

基本上它不起作用。 有什么建議嗎? 謝謝。 PS將來代碼可以放在[code] [/ code]標簽而不是四個空格之間的任何機會?

除以零不會引起標准C ++中的任何異常,而是會為您提供未定義的行為。 通常,如果您想提出異常,您需要自己完成:

int divide( int a, int b ) {
   if ( b == 0 ) {
      throw DivideByZero;    // or whatever
   }
   return a / b;
}

最好的方法是檢查除數是否等於0。

C ++不會檢查被零除。 可以在這里找到簡短的討論。

您似乎正在為Windows編寫代碼(證據: _tmain_TCHAR不是可移植的C ++)。

如果您想要一個僅適用於Windows的解決方案,那么您可以使用所謂的“結構化異常處理”(SEH):

但是,這是僅限MS的功能。 如果您依賴於拋出異常來處理此錯誤,那么如果您希望它在其他平台上運行,則需要花費大量精力才能在以后更改代碼。

最好編寫代碼時要注意除數可能為0時(就像數學時一樣,除以數量,你必須考慮它是否為0)。 Neil的方法是一個很好的低影響解決方案:你可以在不確定的時候使用他的divide函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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