如何找出std::map方法可以抛出哪些异常

How do I find out which exceptions std::map methods can throw?

本文关键字:异常 何找出 std map 方法      更新时间:2023-10-16

我想在使用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)过程中某个底层元素上升时容器的行为。

剩下的唯一可以引发的异常是内存访问违规和内存不足错误,如果有的话,您应该在每一个高级别全局(非常小心)处理这些错误。