[英]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):
__try
, __except
和異常過濾器只捕獲EXCEPTION_INT_DIVIDE_BY_ZERO: http : //msdn.microsoft.com/en-us/library/s58ftw19.aspx,http : //msdn.microsoft.com/en-us/library/aa363082的.aspx 但是,這是僅限MS的功能。 如果您依賴於拋出異常來處理此錯誤,那么如果您希望它在其他平台上運行,則需要花費大量精力才能在以后更改代碼。
最好編寫代碼時要注意除數可能為0時(就像數學時一樣,除以數量,你必須考慮它是否為0)。 Neil的方法是一個很好的低影響解決方案:你可以在不確定的時候使用他的divide
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.