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

Jor*_*ach 7 c++ map

我想在使用std :: map(C++)方法时以及使用boost :: unordered_map方法之类的时候处理异常情况.但是,查看方法文档(例如:insert)并不提供我可以捕获的异常列表.

Ton*_*roy 7

看看好的文档:如果你不确定那么 - 最终 - 标准,但是例如http://en.cppreference.com/w/cpp/container/map/insert可能更方便,并且有一个Exceptions标题涵盖大多数变种(希望有一天会完成).你不太可能找到比升级网站更好的文档来提升.

如果一个好的引用没有记录异常,通常是因为该函数的代码没有显式写入任何东西 - 尽管这并不意味着在函数的参数准备好时不会抛出异常,作为一个方面内存分配或对对象的一些合理操作的影响,例如复制构造或操作符,或者在构造结果期间.所有这些都是常识.

标准的明确要求重新std::map......

23.2.4.1异常安全保证[associative.reqmts.except]

1对于关联容器,没有clear()函数抛出异常.erase(k)不会抛出异常,除非容器的Compare对象(如果有)抛出该异常.

2对于关联容器,如果插入单个元素的insert()函数中的任何操作抛出异常,则insert()函数无效.

3对于关联容器,除非交换容器的Compare对象(如果有)抛出异常,否则交换函数不会抛出异常.


23.4.4.3地图元素访问[map.access]

T&at(const key_type&x);

const T&at(const key_type&x)const;

10抛出:如果不存在这样的元素,则为out_of_range类型的异常对象.