Ответ 1
Собственно, большая часть стандартной библиотечной функции не генерирует самих исключений. Они просто передают исключение, вызванное кодом пользователя, вызываемым ими. Например, если вы push_back()
элемент для вектора, это может вызывать (из-за ошибок выделения памяти и), если выбрал конструктор копирования объекта.
Несколько примечательных исключений (без каламбура), где выполняются функции библиотечных функций:
- Некоторые методы будут бросать
out_of_range
, если указанный индекс недействителен:-
std::vector<>::at()
-
std::basic_string<>::at()
-
std::bitset<>::set()
,reset()
иflip()
.
-
- Некоторые методы будут бросать
std::overflow_error
на целочисленное переполнение:-
std::bitset<>::to_ulong()
и (С++ 0x)to_ullong()
.
-
-
std::allocator<T>
будет переданstd::bad_alloc
, который вызываетсяnew
, который он вызывает. - Потоки могут быть настроены так, чтобы
std::ios_base::failure
были сброшены, когда бит состояния установлен. - Значения больших массивов могут вызывать
std::bad_array_new_length
- dynamic_cast по ссылке может вызывать
std::bad_cast
(технически не входит в стандартную библиотеку) - Отбрасывание недействительного исключения из функции с спецификацией исключения вызовет
std::bad_exception
- Вызов
std::function::operator(...)
, если он не имеет значения, будет бросатьstd::bad_function_call
. - Использование
typeinfo
нулевого указателя может вызватьstd::bad_typeid
. - Доступ к
weak_ptr
после того, как pointee был выпущен, будет бросатьstd::bad_weak_ptr
. - Неправильное использование
std::promise/std::future
может вызватьstd::future_error
. - (С++ 11) Функции преобразования строк
std::stoi
,std::stol
,std::stoll
,std::stoul
,std::stoull
,std::stof
,std::stod
иstd::stold
могут вызывать какstd::invalid_argument
иstd::out_of_range
. - (С++ 11) В семействе регулярных выражений конструкторы и методы присваивания могут бросать
std::regex_error
.
(Я делаю это ответом CW, поэтому, если кто-нибудь может подумать об этом больше, не стесняйтесь добавлять их сюда.)
Кроме того, для 3-го издания языка программирования С++ Bjarne Stroustrup имеет загружаемое приложение