Существует ли ссылка об Исключениях Библиотеки Стандарта C++? Я просто хочу знать это, какие функции могут выдать исключение или нет.
На самом деле, большинство стандартных библиотечных функций сами по себе не генерируют исключения. Они просто передают исключение, созданное вызванным ими пользовательским кодом. Например, если вы push_back ()
элемент вектора, это может вызвать (из-за ошибок выделения памяти и), если выдает конструктор копирования объекта.
Несколько примечательных исключений (без каламбура), в которых генерируются библиотечные функции:
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
передаст std :: bad_alloc
, сгенерированный new
, который он вызывает. std :: ios_base :: failure
выдавались, когда установлен бит состояния. std :: bad_array_new_length
std :: bad_cast
(технически не входит в стандартную библиотеку) std :: bad_exception
std :: function :: operator (...)
, если он не имеет значения, вызовет ] std :: bad_function_call
. typeinfo
нулевого указателя может вызвать std :: bad_typeid
. weak_ptr
после того, как указатель был освобожден, вызовет std :: bad_weak_ptr
. std :: prom / std :: future
может вызвать ошибку std :: future_error
. std :: stoi
, std :: stol
, std :: stoll
, std :: stoul
, std :: stoull
, std :: stof
, std :: stod
и std :: stold
может выдавать как std :: invalid_argument
, так и std :: out_of_range
. std :: regex_error
. (Я делаю этот ответ CW, поэтому, если кто-то может придумать больше таких, пожалуйста, не стесняйтесь добавить их сюда.)
Кроме того, для 3-го издания The C ++ Programming Language ], У Бьярна Страуструпа есть загружаемое приложение о безопасности исключений , которое может быть актуальным.
Единственные функции, которые, как гарантируется (компилятором) не генерируются, - это функции, которые имеют спецификацию исключения throw ()
, например:
void ThisFunctionNeverThrows() throw()
{
}
В противном случае любая другая функция потенциально может вызвать исключение, если иное специально не задокументировано. Вы должны учитывать безопасность исключений при написании кода перед лицом исключений.
См. Статью Бьярна Страуступа о безопасности исключений и стандартной библиотеке: http://www2.research.att.com/~bs/3rd_safe.pdf Начиная со страницы 19 в PDF, вы можете найти информацию по гарантиям на стандартные контейнеры.