На самом деле, большинство функций стандартной библиотеки сами по себе не генерируют исключения. Они просто передают исключение, создаваемое вызванным ими кодом пользователя. Например, если вы push_back()
элементе для вектора, это может привести к выбросу (из-за ошибок выделения памяти и), если сгенерирует конструктор копирования объекта.
Несколько заметных исключений (без каламбура), когда библиотечные функции throw:
- Некоторые методы выдают
out_of_range
, если указанный индекс недействителен:
std::vector<>::at()
std::basic_string<>::at()
std::bitset<>::set()
, reset()
и flip()
.
- Некоторые методы выдают
std::overflow_error
при целочисленном переполнении:
std::bitset<>::to_ulong()
и (C ++ 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
после освобождения пуантиста выдается std::bad_weak_ptr
.
- Неправильное использование
std::promise/std::future
может привести к std::future_error
.
- (c ++ 11) Функции преобразования строк
std::stoi
, std::stol
, std::stoll
, std::stoul
, std::stoull
, std::stof
, std::stod
и std::stold
может бросить как std::invalid_argument
, так и std::out_of_range
.
- (c ++ 11) В семействе регулярных выражений конструкторы и методы назначения могут генерировать
std::regex_error
.
(я делаю это CW-ответ, поэтому, если кто-нибудь может придумать еще что-нибудь подобное, пожалуйста, не стесняйтесь добавлять их сюда.)
Кроме того, для 3-го издания языка программирования C ++ , Бьярн Страуструп имеет загружаемое приложение о безопасности исключений , которое может иметь значение.