#13. [모던 C++ STL] 진단
- (C++11~) 동적 예외 사양이 deprecate 되면서 unexpected()도 함께 deprecate 되었습니다.
- (C++11~)
future_error
,regex_error
,system_error
,ios_base::failure
, bad_weak_ptr, bad_function_call,bad_array_new_length
가 추가되었습니다.- (C++11~) get_terminate()가 추가되었습니다.
- (C++11~) 예외 캡쳐 및 저장이 추가되었습니다.
- (C++11~) 시스템 오류가 추가되었습니다.
- (C++17~) filesystem_error, bad_any_cast, bad_optional_access, bad_variant_access가 추가되었습니다.
- (C++20~) nonexistent_local_time, ambiguous_local_time, format_error가 추가되었습니다.
진단
항목 | 내용 |
---|---|
assert() | 설계한 기능이 올바르게 사용되는지 디버그 모드에서 확인합니다. |
exception
throw를 이용한 예외 보고시 일관된 인터페이스를 제공합니다. STL에서의 모든 예외는 exception
을 상속합니다.
항목 | 내용 |
---|---|
= |
복사 대입합니다. |
what() |
설명 문자열을 리턴합니다. |
표준 예외
표준 예외는 다음을 준수해야 합니다.
항목 | 내용 |
---|---|
logic_error |
프로그램 내의 논리가 잘못되었습니다. |
invalid_argument | 잘못된 인자를 전달했습니다. |
domain_error |
해결하고자 하는 문제 영역(도메인)에 오류가 있습니다. |
length_error |
길이 제한을 초과했습니다. |
out_of_range | 범위를 벗어난 요소에 접근했습니다. |
future_error (C++11~) |
future나 promise의 오류를 보고합니다. |
runtime_error |
논리적 문제는 아니나 실행중에 오류가 발생했습니다. |
range_error | 유효한 범위를 벗어났습니다. |
overflow_error |
계산 결과가 허용 범위 초과입니다. |
underflow_error |
계산 결과가 허용 범위 미만입니다. |
regex_error (C++11~) |
(작성중) |
system_error (C++11~) |
(작성중) |
ios_base::failure (C++11~) |
(작성중) |
tx_exception |
(작성중) |
bad_typeid |
널포인터를 역참조하여 typeid를 구할때 발생합니다.T* p = NULL; typeid(*p).name(); |
bad_cast | dynamic_cast가 실패했습니다. |
filesystem_error (C++17~) | 파일 시스템 처리에서 오류가 발생했습니다. |
bad_any_cast (C++17~) | any 사용시 타입이 일치하지 않습니다. |
bad_optional_access (C++17~) | optional에서 value() 사용시 값이 없습니다. |
bad_variant_access (C++17~) | variant에서 주어진 타입이 없습니다. |
bad_expected_access (C++23~) |
(작성중) |
bad_weak_ptr (C++11~) | shared_ptr에서 잘못된 weak_ptr을 사용했습니다. |
bad_function_call (C++11~) | function에서 () 로 호출할 대상이 없습니다. |
bad_alloc | 메모리 할당에 실패했습니다. |
bad_array_new_length (C++11~) |
(작성중) |
bad_exception | 동적 예외 사양에 bad_exception이 포함되면, unexpected_handler가 호출되고, 여기서 throw;시 bad_exception으로 변환되어 전파됩니다. |
nonexistent_local_time (C++20~) | 지역 시간대를 구할 수 없습니다. |
ambiguous_local_time (C++20~) | 지역 시간대가 모호합니다. |
format_error (C++20~) | formatter의 parse() 시 문제가 발생했습니다. |
예외 처리 실패
예외를 catch()하지 않으면 terminate() 함수를 호출합니다. 자세한 내용은 terminate()를 참고 하세요.
항목 | 내용 |
---|---|
terminate() | 예외를 catch()하지 않으면 호출됩니다. 기본적으로 abort()가 호출됩니다. |
terminate_handler |
terminate()호출시 실행되는 함수입니다. |
get_terminate() (C++11~) |
(작성중) |
set_terminate() |
terminate_handler 를 설정합니다. |
동적 예외 사양 실패
동적 예외 사양에 없는 예외가 발생할 경우 unexpected() 함수가 호출됩니다. 자세한 내용은 동적 예외 사양을 참고하세요.
항목 | 내용 |
---|---|
unexpected() (~C++11) | 동적 예외 사양에서 명시한 예외 이외의 예외가 발생하면 호출됩니다. |
unexpected_handler (~C++11) | bad_exception 을 방출합니다. |
get_expected() (C++11~C++17) |
(작성중) |
set_expected() (~C++17) |
unexpected_handler를 설정합니다. |
오류 번호
항목 | 내용 |
---|---|
errorno |
오류 번호 입니다. strerror()를 이용하여 오류 메시지를 확인할 수 있습니다. POSIX와 호환되며 <cerrono> 에 매크로 상수로 정의되어 있습니다.자세한 내용은 cppreference.com을 참고하시기 바랍니다. |
(C++11~) 예외 캡쳐 및 저장
항목 | 내용 |
---|---|
uncaught_exception() (C++11~C++17)uncaught_exceptions() (C++17~) |
예외가 발생되어 스택 풀기 중인지를 감지합니다. |
exception_ptr (C++11~) |
(작성중) |
make_exception_ptr() (C++11~) |
(작성중) |
current_exception() (C++11~) |
(작성중) |
rethrow_exception() (C++11~) |
(작성중) |
nested_exception (C++11~) |
(작성중) |
throw_with_nested() (C++11~) |
(작성중) |
rethrow_if_nested() (C++11~) |
(작성중) |
(C++11~) 시스템 오류
항목 | 내용 |
---|---|
error_category (C++11~) |
(작성중) |
generic_category() (C++11~) |
(작성중) |
system_category() (C++11~) |
(작성중) |
error_condition (C++11~) |
(작성중) |
errc (C++11~) |
POSIX(운영체제 호환 표준)와 호환되는 에러코드 정의입니다.cppreference를 참고하세요. |
error_code (C++11~) |
(작성중) |
system_error (C++11~) |
(작성중) |
(C++23~) Stacktrace
항목 | 내용 |
---|---|
stacktrace_entry (C++23~) |
(작성중) |
basic_stacktrace (C++23~) |
(작성중) |
댓글남기기