0

我有一个输入迭代器,它使用两个方法 getFirst 和 getNext。这两个函数都是 api 的一部分,理论上这些函数可能会因任何原因而失败。在这种情况下,我正在投射运行时异常。

我以前从未在 C++ 中使用过异常规范,但我想现在可能是开始的好时机。所以我的 Constructor 和 operator++ 函数可以指定它们可以引发运行时错误。

然后我在我的 vector.h 文件(std::vector)中进行了快速搜索,但我没有看到那里使用了 throw。怎么来的?

如果我已经到了迭代器的末尾并且我做了 *(i++) 应该有例外吗?

4

2 回答 2

2

如果我已经到了迭代器的末尾并且我做了 *(i++) 应该有例外吗?

是的,那是一个错误。

关于异常规范,最好指定您的方法何时不抛出。而不是相反。看看这个问题。

于 2012-06-29T07:29:16.527 回答
0

迭代器实际上不知道它何时到达容器的末尾,因为 STL 迭代器不知道它们指向的容器。

因此,由于访问无效内存,尝试增加它并取消引用它“可能”抛出,但无法知道下一个索引是否有效。

于 2012-06-29T07:33:58.433 回答