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