Câu trả lời:
std::exception <exception> interface (debatable if you should catch this)
std::bad_alloc <new> failure to allocate storage
std::bad_array_new_length <new> invalid array length
std::bad_cast <typeinfo> execution of an invalid dynamic-cast
std::bad_exception <exception> signifies an incorrect exception was thrown
std::bad_function_call <functional> thrown by "null" std::function
std::bad_typeid <typeinfo> using typeinfo on a null pointer
std::bad_weak_ptr <memory> constructing a shared_ptr from a bad weak_ptr
std::logic_error <stdexcept> errors detectable before the program executes
std::domain_error <stdexcept> parameter outside the valid range
std::future_error <future> violated a std::promise/std::future condition
std::invalid_argument <stdexcept> invalid argument
std::length_error <stdexcept> length exceeds its maximum allowable size
std::out_of_range <stdexcept> argument value not in its expected range
std::runtime_error <stdexcept> errors detectable when the program executes
std::overflow_error <stdexcept> arithmetic overflow error.
std::underflow_error <stdexcept> arithmetic underflow error.
std::range_error <stdexcept> range errors in internal computations
std::regex_error <regex> errors from the regular expression library.
std::system_error <system_error> from operating system or other C API
std::ios_base::failure <ios> Input or output error
Nguồn: http://en.cppreference.com/w/cpp/error/exception
Trong thực tế, hầu hết các ngoại lệ là các ngoại lệ tùy chỉnh bắt nguồn từ logic_error
và runtime_error
. Không phải những điều này bị bỏ qua, nhưng nhiều ngoại lệ là miền cụ thể.
Hãy nhớ rằng một ngoại lệ sẽ phản ánh những gì đã xảy ra và không phải ai đã ném nó. (Không có "MyProgramException" s)
bad_function_call
được ném ra khi bạn có một đối tượng std :: function được xây dựng mặc định và bạn cố gắng gọi hàm mà nó kết thúc. Vì không có hàm được bọc nên không có gì để gọi.
bad_function_call
được ném ra khi bạn cố gắng gọi std::function
nó chưa sẵn sàng (hay còn gọi là, được xây dựng mặc định hoặc được xóa rõ ràng qua nullptr). future_error
được sử dụng khi bạn vi phạm một trong nhiều điều kiện tiên quyết của các hàm cho promise
và future
. Và domain_error
là (về lý thuyết) đối với các trường hợp đầu vào cho một hàm nằm ngoài phạm vi hợp lệ cho hàm đó (chẳng hạn như một số âm cho std::sqrt
).
future_error
được ném bởi các hoạt động khác nhau trên tương lai khi hoạt động được yêu cầu không hợp lệ hoặc sẽ đưa đối tượng vào trạng thái không hợp lệ. Đây là nội dung mới trong C ++ 11 và tôi không thể phù hợp với hướng dẫn trong một nhận xét.
std::exception
và lưu ý xem chúng có phải là C ++ 11 hay không (cụ thể là được std::ios_base::failure
chuyển từ std::exception
sang std::system_error
). Cách sử dụng và tiêu đề là một liên kết.
Xem trang web này
Exception Description
===================================
std::exception An exception and parent class of all the standard C++ exceptions.
std::bad_alloc This can be thrown by new.
std::bad_cast This can be thrown by dynamic_cast.
std::bad_exception This is useful device to handle unexpected exceptions in a C++ program
std::bad_typeid This can be thrown by typeid.
std::logic_error An exception that theoretically can be detected by reading the code.
std::domain_error This is an exception thrown when a mathematically invalid domain is used
std::invalid_argument This is thrown due to invalid arguments.
std::length_error This is thrown when a too big std::string is created
std::out_of_range This can be thrown by the at method from for example a std::vector and std::bitset<>::operator[]().
std::runtime_error An exception that theoretically can not be detected by reading the code.
std::overflow_error This is thrown if a mathematical overflow occurs.
std::range_error This is occured when you try to store a value which is out of range.
std::underflow_error This is thrown if a mathematical underflow occurs.
c++
, không phải c++11
và tất cả đều giống nhau<stdexcept>
<stdexcept>
như thể hiện bởi ideone.com/uqM6h
std::logic_error
, không phải std::logic_failure
. Sơ đồ đó sai!
bad_function_call, domain_error, and future_error
trên MSDN họ đang exampled tồi tệ nhất và giải thích :(