2013-06-21 3 views
3

이것은 사소한 질문 일 수 있습니다. 그러나 나에게는 분명하지 않았으므로 일부 확인이 필요합니다.C++ try-catch 예외 처리 규칙

int function some_crap() { 
    some_type b; 
    int a = 10; 
    try { 
     a = boost::numeric_cast<int>(b); 
    } 
    catch(boost::bad_numeric_cast& e) { 
     std::cout << e.what() << std::endl; 
     return a; 
    } 
    catch(...) { 
     //-Handle other unknown exceptions 
     return a; 
    } 
    return a; 
} 

IIRC, 내가 catch 각 블록에 return a 문을 둘 필요가 오른쪽 : 나는 함수에 try-catch 블록을 가지고 가정? catch 블록 각각에서 a의 값은 10입니다. 맞습니까?

감사합니다. & 관심을 가져주세요. --T

+0

함수의 맨 끝에 하나의'return a;'문을 넣을 수 있습니다. –

+0

Thanks @Basie. 그러면 프로그램이 catch 블록 밖의 수익에 도달 할 것이라고 말하는 것입니까? 그건 내가 잘 모르는 부분이다. –

+0

알 수없는 예외를 처리하는 것은 불가능합니다. 그것을 무시할 수는 있지만 실제로는 "처리"하는 것이 아닙니다. – Casey

답변

4

IIRC, 나는 오른쪽 catch 각 블록에 return a 문을 넣어해야합니까?

아니요,이 경우는 아닙니다. 중요한 것은 아무것도 반환하지 않고 값 반환 함수의 끝에서 벗어나지 않는 것입니다 (6.6.3/2는 정의되지 않은 동작입니다). 당신이 return 문이 때문에

:

return a; 

함수의 끝에서를, 당신의 catch 블록 하나를 포함 할 필요가 없습니다. 오류의 경우에는 반환 값이없는 경우

또한, 당신은 수행하여 현재 처리 된 예외를 다시 발생 수 :

throw; 

하거나 피하는에서 모든 예외를 캐치 앤 다시 던진다 복구 방법 및/또는 메시지를 기록하지 않아도되는 방법에 대해 충분한 지식이없는 경우 해당하는 catch 블록을 생략하여 전파하십시오.

이시키는 호출 스택은 단지 두 번째 문제에 관해서는 하드 코딩 된 값과 같은 제

복귀보다 의미있을 수까지 전파 예외 : 캐치 각각 또한

블록, a 값 10, 맞습니까?

예, 보장됩니다.

2

기능이 끝날 때 return a이 있으므로 안에 return a을 입력 할 수 있습니다. 하지만 에 대한 응답은에서 까지도 반환합니다.