Có tham khảo về ngoại lệ của Thư viện chuẩn C++ không? Tôi chỉ muốn biết rằng các chức năng nào có thể ném một ngoại lệ hay không.Danh sách ngoại lệ của thư viện chuẩn C++?
Trả lời
Thực ra, hầu hết chức năng thư viện chuẩn không tự ném ngoại lệ. Họ chỉ vượt qua ngoại lệ do mã người dùng gọi ra. Ví dụ: nếu bạn push_back()
một phần tử cho vectơ, điều này có thể ném (do lỗi phân bổ bộ nhớ và) nếu trình tạo bản sao của đối tượng ném.
Một vài trường hợp ngoại lệ đáng chú ý (không ý định chơi chữ), nơi các chức năng thư viện ném là:
- Một số phương pháp sẽ ném
out_of_range
nếu chỉ số cung cấp không hợp lệ:std::vector<>::at()
std::basic_string<>::at()
std::bitset<>::set()
,reset()
vàflip()
.
- Một số phương pháp sẽ ném
std::overflow_error
về tràn số nguyên:std::bitset<>::to_ulong()
và (C++ 0x)to_ullong()
.
std::allocator<T>
sẽ chuyển qua sốstd::bad_alloc
được ném bởinew
mà nó gọi.- Luồng có thể được thiết lập sao cho
std::ios_base::failure
được ném khi bit trạng thái được đặt. - phân bổ mảng lớn có thể ném
std::bad_array_new_length
- dynamic_cast trên một tài liệu tham khảo có thể ném một
std::bad_cast
(về mặt kỹ thuật không nằm trong các thư viện chuẩn) - Ném một ngoại lệ không hợp lệ từ một hàm với một đặc điểm kỹ thuật ngoại lệ sẽ ném một
std::bad_exception
- Gọi số
std::function::operator(...)
nếu không có giá trị sẽ némstd::bad_function_call
. - Sử dụng
typeinfo
của con trỏ rỗng có thể némstd::bad_typeid
. - Truy cập
weak_ptr
sau khi điểm phát hành đã được phát hành sẽ némstd::bad_weak_ptr
. - Sử dụng không chính xác
std::promise/std::future
có thể némstd::future_error
. - (C++ 11) Các chức năng chuỗi chuyển đổi
std::stoi
,std::stol
,std::stoll
,std::stoul
,std::stoull
,std::stof
,std::stod
vàstd::stold
có thể ném cảstd::invalid_argument
vàstd::out_of_range
. - (C++ 11) Trong gia đình regex, các nhà thầu và phương pháp chỉ định có thể ném
std::regex_error
.
(Tôi đang làm cho một câu trả lời CW, vì vậy nếu có ai có thể nghĩ nhiều như vậy, xin vui lòng thêm chúng ở đây.)
Ngoài ra, đối với phiên bản thứ 3 của C++ Programming Language, Bjarne Stroustrup có thể tải xuống appendix about exception safety, có thể có liên quan.
Các chức năng duy nhất được bảo đảm (bởi trình biên dịch) để không ném là chức năng mà có đặc điểm kỹ thuật throw()
ngoại lệ, như thế này:
void ThisFunctionNeverThrows() throw()
{
}
Nếu không, bất kỳ chức năng khác có khả năng có thể ném một ngoại lệ, trừ khi họ là đặc biệt tài liệu khác. Bạn phải xem xét sự an toàn ngoại lệ khi viết mã khi đối mặt với ngoại lệ.
Xem bài viết của Bjarne Stroustup về an toàn ngoại lệ và thư viện chuẩn: http://www2.research.att.com/~bs/3rd_safe.pdf Bắt đầu từ trang 19 trong tệp PDF, bạn có thể tìm thấy thông tin về các đảm bảo được thực hiện bởi các thùng chứa tiêu chuẩn.
Điều này không đúng với nhiều vùng chứa, ví dụ: đảm bảo không ném vào 'erase()', nhưng hàm này không phải là 'throw()'. Từ quan điểm ngôn ngữ, những gì bạn viết có ý nghĩa, nhưng có những sự bảo đảm khác với những gì được thực thi bởi trình biên dịch. – doublep
@doublep: 'erase()' * sẽ * ném nếu hàm tạo bản sao của loại phần tử ném. – kennytm
Từ trang 21 trong tệp PDF tôi đã đề cập (Bảo đảm cho 'vector' và' deque'): "Trừ khi được tạo bởi hàm tạo bản sao hoặc toán tử gán của kiểu phần tử, không có' xoá() 'ném ngoại lệ." –
- 1. Các lớp ngoại lệ nào trong thư viện chuẩn C++
- 2. Có danh sách các giao diện thư viện chuẩn C++ 11 yêu cầu bật ngoại lệ không?
- 3. danh sách các ngoại lệ
- 4. Thư viện ngoại lệ cho C (không phải C++)
- 5. Chính sách xử lý ngoại lệ trong thư viện
- 6. Thư viện chuẩn của Intel (C++)
- 7. phiên bản của thư viện chuẩn C++
- 8. Danh sách retainAll ngoại lệ
- 9. Danh sách ngoại lệ python chuẩn cho các chương trình cần nâng cao ở đâu?
- 10. Làm việc bên trong của thư viện chuẩn C
- 11. Danh sách C++ thư viện cho Graph Theory
- 12. Bao gồm thư viện chuẩn C++
- 13. C các thư viện phi tiêu chuẩn
- 14. Đâu là tiêu đề của thư viện chuẩn C++
- 15. Thư viện C chuẩn ở đâu trên Mac OS X?
- 16. Thư viện chuẩn dành cho người lớn cho C
- 17. Phiên bản có thể in của thư viện chuẩn Haskell
- 18. Tạo thư viện đã ký với ILMerge ném ngoại lệ
- 19. Tài liệu thư viện chuẩn của SBCL?
- 20. Sự khác biệt giữa thư viện chuẩn C và thư viện C POSIX
- 21. Một số phương pháp hay nhất của Thư viện chuẩn C++ là gì?
- 22. Hướng dẫn tham khảo thư viện chuẩn C++ 0x
- 23. Sự khác nhau giữa thư viện chuẩn và thư viện mẫu chuẩn là gì?
- 24. Thư viện chuẩn Python có thực sự chuẩn không?
- 25. Điểm chuẩn thư viện Regex
- 26. boost :: tùy chọn thay thế trong Thư viện chuẩn C++
- 27. Ném một danh sách liên kết ngoại lệ trong Java
- 28. NDK không tìm thấy thư viện C++ chuẩn
- 29. Ngoại lệ giữa các thư viện C++ chia sẻ trong g ++
- 30. Ngoại lệ Java và Ngoại lệ C++
Related: http://stackoverflow.com/questions/11938979/what-exception-classes-are-in-the-standard-c-library –