catch는 위에서 아래로 검사하므로 좁은 타입을 먼저 둔다
먼저 만난 catch 하나만 실행된다. 부모 타입이 앞에 있으면 자식 타입 전용 복구가 닫힌다.
1 구체 예외invalid_argument처럼 원인이 분명한 타입
2 도메인 예외프로그램이 정의한 복구 가능한 타입
3 std::exception표준 예외의 공통 부모
4 catch(...)마지막 안전망
| catch | 잡는 대상 | 위치 |
|---|---|---|
| invalid_argument | 잘못된 인자처럼 복구 방식이 뚜렷한 실패 | 가장 위 |
| CustomError | 업무 규칙에 맞춘 상세 예외 | 표준 부모보다 위 |
| std::exception | 표준 예외 공통 처리 | 구체 타입 뒤 |
| catch(...) | 타입을 모르는 모든 예외 | 항상 마지막 |
핵심: catch 순서는 복구 정책이다. 넓은 타입일수록 아래에 둔다.