Подтвердить что ты не робот

Есть ли список методов контейнера STL, которые могут вызывать исключение где угодно?

Я знаю, что STL выбрасывает ошибку выделения памяти или если содержащийся в ней тип генерирует свой оператор-конструктор/присваивание.

В противном случае, по-видимому, "несколько" методов STL могут вызывать другие исключения. Пример, который, по-видимому, упоминается, - vector:: at(), но я не могу найти список других в любом месте.

Кто-нибудь знает о таком списке?

4b9b3361

Ответ 1

Не будет на 100% точным и для С++ 03, но полчаса усилий, основанных на grepping через GCC 4.3.4, включает в себя, игнорируя tr1 и ext, но включая iostream. Реально, некоторые из этих проверок могут быть связаны с этой реализацией, предпочитающей более защитное кодирование, и, возможно, не могут быть предусмотрены в стандарте и доступны повсеместно....

  • bitset
    • std::overflow_error - .to_ulong(), когда слишком много бит вставляется без знака long
    • std::out_of_range - operator[]() попытка прошлого конца
  • new
    • std::bad_alloc
  • typeinfo
    • std::bad_cast при недействительной попытке dynamic_cast
  • ios
    • std::ios_base::failure при использовании масок исключений для сообщений об ошибках
  • string
    • out_of_range - at/append/assign/insert/erase/replace/copy/substr
    • length_error: попытка превысить max_size() во время reserve или неявное изменение размера (например, assign/insert/+= и т.д.)
  • locale
    • std::bad_cast, если locale не содержит грань типа Facet
    • std::runtime_error в различных ситуациях с нулевым указателем / undefined -facet
  • deque/vector
    • length_error: попытка reserve() или неявно-расти > max_size()
    • out_of_range: at()
  • map
    • std::out_of_range: at()

Ответ 2

Ну, у меня есть эта большая, гигантская книга под названием С++ Standard, которая содержит полное описание всех функций в стандартной библиотеке и то, что они могут/не могут сделать.