繁体   English   中英

我如何找出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标题涵盖大多数变种(希望有一天会完成)。 你不太可能找到比升级网站更好的文档来提升。

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

标准的明确要求re 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类型的异常对象。

乔治,

标准容器只能在访问时抛出out-of-range异常,它们不会在其他操作上抛出异常 但是,当此操作重载时,包含的项可以引入内部操作(构造函数,赋值,比较)。 这就是@ tony-d链接给出最佳答案的原因:这记录了在操作期间(插入/清除/交换)某些底层元素引发时容器的行为。

可以引发的唯一例外是内存访问冲突和内存不足错误,您应该在每个高级别(如果有的话)全局(并且非常小心)地处理这些错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM