Catch Ordering

catch 선택 순서

여러 예외를 처리할 때는 구체적인 타입을 먼저 두고, 일반 타입과 catch (...)는 마지막 방어선으로 둡니다.

1st catch (const std::invalid_argument&)

나누기 0처럼 인자 오류를 구체적으로 처리합니다.

2nd catch (const OutOfRangeException&)

사용자 정의 예외도 의미가 선명한 위치에서 잡습니다.

3rd catch (const std::exception&)

표준 예외 계층의 공통 처리와 로깅을 담당합니다.

last catch (...)

타입을 모르는 예외를 잡는 최후의 안전망입니다.

const reference 예외 객체는 보통 참조로 받습니다.

예외 객체를 참조로 받아 복사를 피하고 파생 타입 정보도 보존합니다.

too general 일반 타입을 먼저 두면 아래 catch가 죽습니다.

std::exception을 맨 위에 두면 자식 예외의 전용 처리 기회를 잃습니다.