Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Standard Library Exception List?

Tags:

c++

exception

stl

Is there a reference about C++ Standard Library Exceptions? I just want to know that which functions may throw an exception or not.

like image 747
Brian Avatar asked May 16 '10 13:05

Brian


People also ask

What library is exception in?

The C++ Standard library provides a base class specifically designed to declare objects to be thrown as exceptions. It is called std::exception and is defined in the <exception> header.

What are the different C++ standard exceptions?

A C++ exception is a response to an exceptional circumstance that arises while a program is running, such as an attempt to divide by zero. Exceptions provide a way to transfer control from one part of a program to another. C++ exception handling is built upon three keywords: try, catch, and throw.

What is STD exception?

std::exception::whatReturns a null terminated character sequence that may be used to identify the exception. The particular representation pointed by the returned value is implementation-defined. As a virtual function, derived classes may redefine this function so that specific values are returned.

What is strong exception guarantee?

Strong exception guarantee -- If the function throws an exception, the state of the program is rolled back to the state just before the function call. (for example, std::vector::push_back) Basic exception guarantee -- If the function throws an exception, the program is in a valid state.


1 Answers

Actually, most of the standard library function don't throw exceptions themselves. They just pass on exception thrown by user code invoked by them. For example, if you push_back() an element to a vector, this can throw (due to memory allocation errors and) if the object's copy constructor throws.

A few notable exceptions (no pun intended) where library functions throw are:

  • Some methods will throw out_of_range if the index provided is invalid:
    • std::vector<>::at()
    • std::basic_string<>::at()
    • std::bitset<>::set(), reset() and flip().
  • Some methods will throw std::overflow_error on integer overflow:
    • std::bitset<>::to_ulong() and (C++0x) to_ullong().
  • std::allocator<T> will pass on std::bad_alloc thrown by new which it invokes.
  • Streams can be setup so that std::ios_base::failure are thrown when a state bit is set.
  • Large array allocations can throw std::bad_array_new_length
  • dynamic_cast on a reference can throw a std::bad_cast (technically not part of the standard library)
  • Throwing an invalid exception from a function with an exception specification will throw a std::bad_exception
  • Calling a std::function::operator(...) if it has no value will throw std::bad_function_call.
  • Using typeinfo of a null pointer may throw a std::bad_typeid.
  • Accessing a weak_ptr after the pointee has been released will throw a std::bad_weak_ptr.
  • Incorrect usage of std::promise/std::future may throw a std::future_error.
  • (c++11) The string conversion functions std::stoi, std::stol, std::stoll, std::stoul, std::stoull, std::stof, std::stod, and std::stold can throw both std::invalid_argument and std::out_of_range.
  • (c++11) In the regex family, constructors and assign methods can throw std::regex_error.

(I'm making this a CW answer, so if anyone can think of more such, please feel free to append them here.)

Also, for the 3rd edition of The C++ Programming Language, Bjarne Stroustrup has a downloadable appendix about exception safety, which might be relevant.

like image 93
5 revs, 5 users 54% Avatar answered Oct 18 '22 17:10

5 revs, 5 users 54%