Home > Mobile >  Exception not catching overflow or underflow in C
Exception not catching overflow or underflow in C

Time:12-13

Exception not catching if two numbers are overflowing. The output only printing the wrong number which is negative.

   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;
    }
}


// main


Test t1(533222220);
Test t2(300002222);
Test t = t1 * t2; // does not throw exception but  t1 * t2 -1416076888

CodePudding user response:

Exception not catching if two numbers are overflowing.

Correct. No exceptions are thrown by integer arithmetic. If signed integer operation overflows, then the behaviour of the program is undefined.

CodePudding user response:

Despite how it sounds like, std::overflow_error and std::underflow_error does not detect arithmetic overflow and underflow by default. In standard library, overflow_error is only used for converting bitset to number, and underflow_error is never used. Any other overflow and underflow must be checked manually.

For more about how to detect overflows, you might check: How do I detect unsigned integer multiply overflow?

  • Related