Exception Specifications are Checked at Run Time

Exception Specifications are Checked at Run Time

A function can specify explicitly what type of exception it may throw. An exception specification, however, is not checked at compile time, but rather at run time:

 class X {};int f();        // no exception specification, can throw any type of exceptionvoid g(int j) throw(); // promises not to throw any exception at all{	  int result = f(); // if f throws an exception, g will violate its  guarantee not to throw an exception                               //still, this is a perfectly legal code}

There are several reasons for this runtime checking policy. In the example, f could be a legacy C function. It is impossible to force a C function to have an exception specification. Also, forcing the programmer to write unnecessary try/catch blocks in g (although f doesn’t throw any exception at all) is an unacceptable burden. For these reasons, an exception specification is checked at run time.


Share the Post: