#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~) |
(작성중) |
댓글남기기