Список исключений библиотеки стандарта C++?

Существует ли ссылка об Исключениях Библиотеки Стандарта C++? Я просто хочу знать это, какие функции могут выдать исключение или нет.

15
задан Trevor Hickey 11 January 2016 в 02:25
поделиться

2 ответа

На самом деле, большинство стандартных библиотечных функций сами по себе не генерируют исключения. Они просто передают исключение, созданное вызванным ими пользовательским кодом. Например, если вы 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
  • 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 :: prom / 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-го издания The C ++ Programming Language ], У Бьярна Страуструпа есть загружаемое приложение о безопасности исключений , которое может быть актуальным.

19
ответ дан 1 December 2019 в 03:43
поделиться

Единственные функции, которые, как гарантируется (компилятором) не генерируются, - это функции, которые имеют спецификацию исключения throw () , например:

void ThisFunctionNeverThrows() throw()
{
}

В противном случае любая другая функция потенциально может вызвать исключение, если иное специально не задокументировано. Вы должны учитывать безопасность исключений при написании кода перед лицом исключений.

См. Статью Бьярна Страуступа о безопасности исключений и стандартной библиотеке: http://www2.research.att.com/~bs/3rd_safe.pdf Начиная со страницы 19 в PDF, вы можете найти информацию по гарантиям на стандартные контейнеры.

1
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: