2011-08-06 6 views
20

catch 블록에서 throw 된 예외가 나중에 catch 블록에 의해 catch됩니까?

다음 C++ 코드를 고려하십시오.

try { 
    throw foo(1); 
} catch (foo &err) { 
    throw bar(2); 
} catch (bar &err) { 
    // Will throw of bar(2) be caught here? 
} 

try 블록 안에 있지 않기 때문에 대답이 '아니오'라고 생각하고 대답은 다른 질문에서 볼 수 있습니다. . 예, 테스트 프로그램을 실행할 수는 있지만 원격 컴파일러에 버그가있는 원격 동작의 언어 정의를 알고 싶습니다.

답변

21

블록 번호 try 블록에서 발생하는 예외 만 catch 블록에 걸릴 수 있습니다.

7

아니요, 그렇지 않습니다. 들어있는 catch 블록이 위쪽으로 계층을 포착 할 수 있습니다.

샘플 예 : 당신이 시도 그래서 만약

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

에 예외 대표단 원하는 동작을 얻을 수 있습니다 'main()'함수에서 k. 그러면 대답이 더 명확 해집니다. – zar

2

아니, catch 블록은, 가장 가까운 예외를 처리 ... 캐치 (예외 & EXC) ... 캐치는 예외가 될 것입니다 (& derivedExc을 SomethingDerived) & EXC 블록에서 처리하는

당신은 바 (2)`캐치 블록에 잡힐 것 '이라는 대답을 개선해야 호출 방법

관련 문제