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

Ton*_*ark 13 c++ stl

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

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

有谁知道这样的清单?

Ton*_*roy 17

不会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 如果locale不包含类型的构面 Facet
    • std::runtime_error 在各种null-pointer/undefined-facet情况下
  • deque/vector
    • length_error:尝试reserve()或隐含增长>max_size()
    • out_of_range: at()
  • map
    • std::out_of_range: at()