是否有可能在任何地方抛出异常的STL容器方法列表?

时间:2010-11-25 01:35:22

标签: c++ stl

我知道STL会抛出内存分配错误,或者如果包含的类型在其构造函数/赋值运算符中抛出。

否则,显然'少数'STL方法可能抛出其他异常。每个人似乎都提到的例子是vector :: at(),但我无法在任何地方找到其他人的列表。

有谁知道这样的清单?

2 个答案:

答案 0 :(得分:16)

不会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在各种null-pointer / undefined-facet情况下
  • deque / vector
    • length_error:尝试reserve()或隐式增长> max_size()
    • out_of_rangeat()
  • map
    • std::out_of_rangeat()

答案 1 :(得分:3)

好吧,我有一本名为 The C ++ Standard 的大型巨型书,其中包含标准库中所有函数的完整描述以及它们能做什么/不能做什么。