Hi,
Is there a reference about C++ Standard Library Exceptions? I just want to know that which functions may throw an exception or not.
Thank you.
Hi,
Is there a reference about C++ Standard Library Exceptions? I just want to know that which functions may throw an exception or not.
Thank you.
The only functions guaranteed (by the compiler) to not throw are functions that have the throw()
exception specification, like this:
void ThisFunctionNeverThrows() throw()
{
}
Otherwise, any other function can potentially throw an exception, unless they are specifically documented otherwise. You must consider exception safety when writing code in the face of exceptions.
See Bjarne Stroustup's article on exception safety and the standard library: http://www2.research.att.com/~bs/3rd_safe.pdf Starting on page 19 in the PDF you can find information on guarantees made by the standard containers.
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:
out_of_range
if the index provided is invalid:
std::vector<>::at()
std::basic_string<>::at()
std::bitset<>::set()
, reset()
and flip()
.overflow_error
on integer overflow:
std::bitset<>::to_ulong()
and (C++0x) to_ullong()
.std::allocator<T>
will pass on out-of-memory exceptions thrown by new
which it invokes. (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.