如何找出std::map方法可以抛出哪些异常
How do I find out which exceptions std::map methods can throw?
我想在使用std::map(C++)方法以及使用boost::unordered_map方法时处理特殊情况。然而,查看方法文档(例如:insert)并没有提供我可以捕获的异常列表。
看看好的文档:如果你不确定,那么最终是标准,但例如。http://en.cppreference.com/w/cpp/container/map/insert可能更方便,并且有一个涵盖大多数变体的Exceptions标题(希望有一天能完成)。你不太可能找到比boost网站上保存的更好的boost文档。
如果一个好的引用没有记录异常,通常是因为该函数的代码没有明确地编写为抛出任何异常——尽管这并不意味着在准备函数的参数时,不可能抛出异常,这是内存分配的副作用或对对象的一些合理操作,例如复制构造或运算符,或者在构造结果的过程中。不过这都是常识。
本标准对std::map
。。。
23.2.4.1异常安全保证【相关要求除外】
1对于关联容器,没有clear()函数抛出异常。擦除(k)不引发异常除非该异常是由容器的Compare对象(如果有的话)引发的。
2对于关联容器,如果insert()函数中的任何操作引发异常如果插入单个元素,insert()函数将不起作用。
3对于关联容器,除非由交换容器的Compare对象(如果有的话)。
23.4.4.3地图元素访问[地图访问]
T&at(const key_type&x);
常量T&at(const key_type&x)const;
10抛出:如果不存在out_of_range类型的异常对象。
Jorge,
标准容器只能在访问时抛出out-of-range
异常,它们不会在其他操作中抛出异常。但是,当内部操作(构造函数、赋值、比较)重载时,包含的项可能会引发内部操作。这就是@tony-d链接给出最佳答案的原因:它记录了在操作(insert/clear/swap)过程中某个底层元素上升时容器的行为。
剩下的唯一可以引发的异常是内存访问违规和内存不足错误,如果有的话,您应该在每一个高级别全局(非常小心)处理这些错误。
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 如何找出引入AVX标志的内容
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 无法找出我的代码中的内存泄漏
- C++找出覆盖同一行的数组
- 找出可变参数宏中的__VA_ARGS__类型
- 我正在尝试根据 4 个方程找出六个值
- 从utsname找出Linux操作系统名称
- 试图找出为什么我会收到运行时错误?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- UE4(С++) 我找出按下了哪个键
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 试图找出为什么我的代码保持无限循环
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 我无法找出我的代码出了什么问题
- 找出三个数,它们是给定数的除数,并且它们的和是最小的
- 如何找出浮点异常的位置
- 无法找出异常C++错误
- 如何找出std::map方法可以抛出哪些异常
- 如何找出STL容器抛出异常时的确切条件?