Есть ли список методов контейнера STL, которые могут генерировать исключения где-нибудь? - PullRequest
12 голосов
/ 25 ноября 2010

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

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

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

Ответы [ 2 ]

16 голосов
/ 25 ноября 2010

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

  • bitset
    • std::overflow_error - .to_ulong() когда слишком много битов не помещается в длинную без знака
    • 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, если локаль не содержит фасет типа Facet
    • std::runtime_error в различных ситуациях нулевого указателя / неопределенного фасета
  • deque / vector
    • length_error: атмpt reserve() или неявно-расти> max_size()
    • out_of_range: at()
  • map
    • std::out_of_range:at()
3 голосов
/ 25 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...