C++ 표준 라이브러리 예외에 대한 참조가 있습니까? 난 그냥 어떤 기능이 예외를 던질 수 있는지 여부를 알고 싶습니다. 던져하지 (컴파일러) 보장C++ 표준 라이브러리 예외 목록?
답변
실제로 대부분의 표준 라이브러리 함수는 예외 자체를 발생시키지 않습니다. 그들은 단지 그들에 의해 호출 된 사용자 코드에 의해 던져진 예외에 전달합니다. 예를 들어 벡터에 요소가 push_back()
인 경우이 개체의 복사 생성자가 throw하는 경우 메모리 할당 오류 및)로 인해 발생할 수 있습니다. 라이브러리 함수가 던져
몇 가지 주목할만한 예외
(웃기려는 의도는) 없습니다 :std::vector<>::at()
std::basic_string<>::at()
- : 제공된 인덱스가 무효 인 경우
- 어떤 방법이
out_of_range
가 발생합니다std::bitset<>::set()
,reset()
및flip()
.
- 어떤 방법이
- 일부 방법은 정수 오버 플로우에
std::overflow_error
가 발생합니다 :std::bitset<>::to_ulong()
와 (C + +0)to_ullong()
을.
- 은 에 의해에 의해 던져진
std::bad_alloc
을 전달합니다. - 상태 비트가 설정 될 때
std::ios_base::failure
이 던져 지도록 스트림을 설정할 수 있습니다. - 큰 어레이의 할당이
std::bad_array_new_length
는 기준에
- dynamic_cast는이
std::bad_exception
- 를 슬로우 예외 사양 함수에서 잘못된 예외를 던지고
std::bad_cast
(표준 라이브러리의 기술적 속하지) - 던질 수 던져 값이없는 경우
std::function::operator(...)
을 호출하면std::bad_function_call
이 전달됩니다. - null 포인터의
typeinfo
을 사용하면std::bad_typeid
이 표시 될 수 있습니다. - pointee가 해제 된 후
weak_ptr
에 액세스하면std::bad_weak_ptr
이 표시됩니다. std::promise/std::future
의 잘못된 사용은std::future_error
이 표시 될 수 있습니다.- (C++ 11) 문자열 변환 함수
std::stoi
,std::stol
는std::stoll
는std::stoul
는std::stoull
,std::stof
,std::stod
및std::stold
는std::invalid_argument
및std::out_of_range
모두를 던질 수있다. - (C++ 11) regex 제품군에서 생성자와 할당 메소드는
std::regex_error
을 가져올 수 있습니다.
(사람이 더 등 생각할 수있는, 그래서 만약 내가 이것을 CW 응답을 만들고 있어요, 여기를 추가 주시기 바랍니다.)
또한, 는 C++ 프로그래밍 언어의 제 3 판에 대한으로 Bjarne Stroustrup은 다운로드 할 수있는 appendix about exception safety을 다운로드 할 수 있습니다.
유일한 기능이처럼 throw()
예외 사양이 기능은 다음과 같습니다 그들은 특별히하지 않는 한
void ThisFunctionNeverThrows() throw()
{
}
그렇지 않으면, 다른 기능은 잠재적으로 예외를 던질 수 그렇지 않으면 문서화. 예외 상황에서 코드를 작성할 때는 예외 안전을 고려해야합니다.
예외 안전 및 표준 라이브러리에 대한 Bjarne Stroustup의 기사 : http://www2.research.att.com/~bs/3rd_safe.pdf을 참조하십시오. PDF의 19 페이지부터 표준 컨테이너가 보증하는 정보를 찾을 수 있습니다.
이것은 많은 컨테이너와 같이 정확하지 않습니다. 'erase()'를 던지지 않도록 보장하지만,이 함수는'throw()'가 아닙니다. 언어 관점에서 쓴 것은 의미가 있지만, 컴파일러에 의해 특별히 강제되는 것 이외의 다른 것들이 있습니다. – doublep
@doublep :'erase()'*는 요소 타입의 복사 생성자가 던져 버리면 던질 것입니다. – kennytm
필자가 언급 한 PDF의 21 페이지 (Vector와 Deque에 대한 보증) : "복사 생성자 또는 요소 유형의 대입 연산자가 throw하지 않으면 erase()가 예외를 throw하지 않습니다." –
- 1. C++ 표준 라이브러리 버전
- 2. 표준 C++ 라이브러리
- 3. Must 표준 라이브러리 파이썬 초보자를위한 표준 라이브러리
- 4. C 표준 라이브러리 코너 사례
- 5. 표준 예외 클래스
- 6. C를위한 성숙한 표준 라이브러리
- 7. 자바 표준 라이브러리 - 그래프?
- 8. 해석 된 표준 라이브러리
- 9. valarray와 C++ 표준 라이브러리 알고리즘을 사용
- 10. C/C을 찾고 ++ 언어와 표준 라이브러리 사양
- 11. 문자열을 이스케이프 처리하기위한 표준 C 라이브러리
- 12. 표준 라이브러리 호출을하는 C++ 메소드를 테스트하는 패턴
- 13. gnu gcc 사이트의 표준 C++ 라이브러리 헤더
- 14. EXC_BAD_ACCESS, 표준 C 라이브러리 iphone에서 "열기"?
- 15. C++ Eclipse 프로젝트에 표준 라이브러리 추가
- 16. C++ 표준 라이브러리 용 Xcode 설명서 집합
- 17. 표준 라이브러리 헤더 파일 미리 컴파일 - C++
- 18. 차이 : 표준 : : 예외 대 표준 : : runtime_error()
- 19. g ++의 공유 C++ 라이브러리 사이의 예외
- 20. 플래시 표준 라이브러리?
- 21. SBCL 표준 라이브러리 설명서?
- 22. Matrix 표준 라이브러리
- 23. 빠른 질문 ++ 표준 라이브러리
- 24. 표준 라이브러리`FILE` 유형
- 25. 표준 라이브러리 소스 파일
- 26. Java, 클래스 별 예외 vs. 표준 예외
- 27. g ++를 사용하는 표준 템플릿 라이브러리
- 28. C의 표준 데이터 구조 라이브러리?
- 29. 표준 ActiveXObject 참조 목록
- 30. 표준 자바 계약서 목록
관련 : http://stackoverflow.com/questions/11938979/what-exception-classes-are-in-the-standard-c-library –