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?