繁体   English   中英

异常未捕获 C++ 中的上溢或下溢

[英]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_errorstd::underflow_error不会检测算术溢出和下溢。 在标准库中, overflow_error仅用于将bitset转换为数字,从不使用underflow_error 必须手动检查任何其他上溢和下溢。

有关如何检测溢出的更多信息,您可以查看: 如何检测无符号 integer 乘法溢出?

如果两个数字溢出,异常不会捕获。

正确的。 integer 算法不会引发异常。 如果签名的 integer 操作溢出,则程序的行为未定义。

标准C++ 中, catch块仅适用于throw语句,并且您显示的代码中没有throw语句。

一些编译器具有供应商扩展,可能会将非异常错误(如 integer 溢出)转换为 C++ 异常,但您的示例显然不是发生这种情况的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM