开发者

Will exception thrown in catch block be caught by later catch blocks?

开发者 https://www.devze.com 2023-03-26 03:45 出处:网络
Consider the following C++ code: try { throw foo(1); } catch (foo &err开发者_StackOverflow社区) {

Consider the following C++ code:

try {
  throw foo(1);
} catch (foo &err开发者_StackOverflow社区) {
  throw bar(2);
} catch (bar &err) {
  // Will throw of bar(2) be caught here?
}

I would expect the answer is no since it is not inside the try block and I see in another question the answer is no for Java, but want to confirm C++ is also no. Yes, I can run a test program, but I'd like to know the language definition of the behavior in the remote case that my compiler has a bug.


No. Only exceptions thrown in the associated try block may be caught by a catch block.


No, It won't, An enclosing catch block upwards the hierarchy will be able to catch it.

Sample Example:

void doSomething()
{
    try 
    {
       throw foo(1);
    } 
    catch (foo &err) 
    {
       throw bar(2);
    } 
    catch (bar &err) 
    {
       // Will throw of bar(2) be caught here?
       // NO It cannot & wont 
    }
}

int main()
{
    try
    {
        doSomething();
    }
    catch(...)   
    {
         //Catches the throw from catch handler in doSomething()
    }
    return 0;
}


No, a catch block handles the nearest exception, so if you try ... catch ( Exception &exc ) ... catch ( SomethingDerived &derivedExc ) the exception will be handled in the &exc block

You might achieve the desired behaviour by exception delegation to the calling method

0

精彩评论

暂无评论...
验证码 换一张
取 消