더북(TheBook)

1.6.2.4 누가 던지는가?

이미 C++03에서는 함수에서 던질 수 있는 예외 타입을 지정할 수 있었다. 세부 사항은 밝히지 않겠지만, 이 사양은 별로 유용하지 않으며 이제는 더 이상 사용하지 않는다.

C++11에서는 함수에서 예외를 던지지 않아야 한다는 걸 지정하는 새로운 지정자를 추가했다.

double square_root(double x) noexcept { ... }

이 지정자의 장점은 호출 코드가 square_root 호출 후에 던진 예외를 확인하지 않아도 된다는 점이다. 만약 지정자를 추가했음에도 불구하고 예외가 발생하면 프로그램을 종료한다.

템플릿 함수에서는 예외가 발생했는지 여부에 따라 상관없이 인수 타입에 의존할 수 있다. 이를 올바르게 처리하기 위해 noexcept는 컴파일 타입 조건에 의존할 수 있다. 5.2.2절을 참조하라.

단정 또는 예외가 바람직한지 아닌지는 쉬운 질문이 아니며 대답 또한 간단하지 않다. 그 질문은 아마도 지금 당장 여러분을 괴롭히지는 않을 것이다. 따라서 우리는 이에 대한 설명을 A.2.6절로 미루며 해당 부분을 읽고 난 뒤 여러분이 직접 생각해보기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.