Есть ли ссылка на Исключения стандартной библиотеки С++? Я просто хочу знать, какие функции могут вызывать исключение или нет.
Список исключений стандартной библиотеки С++?
Ответ 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 имеет загружаемое приложение
Ответ 2
Единственными гарантированными (компилятором) функциями, которые не выбрасываются, являются функции, которые имеют спецификацию исключения throw(), например:
void ThisFunctionNeverThrows() throw()
{
}
В противном случае любая другая функция может потенциально генерировать исключение, если только они не задокументированы иначе. Вы должны учитывать безопасность исключений при написании кода перед исключениями.
См. статью Bjarne Stroustup о безопасности исключений и стандартной библиотеке: http://www2.research.att.com/~bs/3rd_safe.pdf Начиная со страницы 19 в формате PDF вы можете найти информацию о гарантии, сделанные стандартными контейнерами.