Answers:
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
来源:http : //en.cppreference.com/w/cpp/error/exception
实际上,大多数异常是从logic_error
和派生的自定义异常runtime_error
。并不是说这些都是被忽略的,而是许多例外是特定于领域的。
请记住,异常应该反映出了什么问题而不是由谁抛出的。(无“ MyProgramException”)
bad_function_call
当您有一个默认构造的std :: function对象并尝试调用它包装的函数时,将抛出该异常。由于没有包装函数,因此没有什么可调用的。
bad_function_call
当您尝试调用std::function
尚未准备就绪(也就是默认构造或通过nullptr明确清除)的调用时抛出该异常。 future_error
当您违反promise
和功能的多个前提之一时,将使用future
。和domain_error
是(理论上)为例,其中输入到功能是外该功能的有效范围(如对于一个负数std::sqrt
)。
future_error
当所请求的操作无效或将对象置于无效状态时,期货上的各种操作会抛出该异常。这是C ++ 11中的新内容,我无法在注释中添加教程。
std::exception
,并指出它们是否为C ++ 11(尤其是std::ios_base::failure
从std::exception
移至std::system_error
)。用法和标头是一个链接。
看这个网站
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++
,不是c++11
,并且它们都位于同一位置<stdexcept>
<stdexcept>
如ideone.com/uqM6h
std::logic_error
不是std::logic_failure
。该图是错误的!
bad_function_call, domain_error, and future_error
在msdn上,它们是最坏的例子,并得到了解释:(