[英]Exception not catching overflow or underflow in C++
如果两个数字溢出,异常不会捕获。
output 只打印错误的负数。
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
不管它听起来如何,默认情况下std::overflow_error
和std::underflow_error
不会检测算术溢出和下溢。 在标准库中, overflow_error
仅用于将bitset
转换为数字,从不使用underflow_error
。 必须手动检查任何其他上溢和下溢。
有关如何检测溢出的更多信息,您可以查看: 如何检测无符号 integer 乘法溢出?
如果两个数字溢出,异常不会捕获。
正确的。 integer 算法不会引发异常。 如果签名的 integer 操作溢出,则程序的行为未定义。
在标准C++ 中, catch
块仅适用于throw
语句,并且您显示的代码中没有throw
语句。
一些编译器具有供应商扩展,可能会将非异常错误(如 integer 溢出)转换为 C++ 异常,但您的示例显然不是发生这种情况的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.