A reader asked me the following questions: “Can a function that returns something, throw a exception and still return a value?” Lets’ look at a concrete example:
int f(){ if (something) throw X();else return 0;}
f() has two exit points: the throw statement and the return statement. On each invocation, f() can exit only from one of these exit points. Thus, syntactically, there is no way that f() can both throw and exception and return a value. At the logical level, there is another reason why it is impossible to return and throw at the same time. When an exception is thrown, it means that the function encountered an irrecoverable error from which it cannot proceed normally and return a meaningful value. On the other hand, if the function can return a meaningful result, there’s no reason why an exception should be thrown. The execution path of a return statement and a throw statement are always mutually exclusive.