如果兩個數字溢位,則不會捕獲例外。
輸出只列印錯誤的負數。
Test operator*(const Test &object) const
{
try
{
return Test(value * object.value);
}
catch (std::overflow_error &e)
{
cout << e.what() << endl;
}
catch (std::underflow_error &e)
{
cout << e.what() << endl;
}
}
在主要:
Test t1(533222220);
Test t2(300002222);
Test t = t1 * t2; // does not throw exception but t1 * t2 -1416076888
uj5u.com熱心網友回復:
如果兩個數字溢位,則不會捕獲例外。
正確的。整數算術不會拋出例外。如果有符號整數運算溢位,則程式的行為未定義。
uj5u.com熱心網友回復:
盡管聽起來像,std::overflow_error
并且std::underflow_error
默認情況下不檢測算術上溢和下溢。在標準庫中,overflow_error
僅用于轉換bitset
為數字,underflow_error
從不使用。必須手動檢查任何其他上溢和下溢。
有關如何檢測溢位的更多資訊,您可以查看:如何檢測無符號整數乘法溢位?
uj5u.com熱心網友回復:
在標準C 中,catch
塊僅適用于throw
陳述句,并且throw
您顯示的代碼中沒有陳述句。
某些編譯器具有供應商擴展,可以將非例外錯誤(如整數溢位)轉換為 C 例外,但您的示例顯然不是這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/379800.html