当对象的当前状态不允许对其进行尝试操作时抛出哪个异常?

时间:2017-08-30 11:54:36

标签: c++ exception error-handling exception-handling

让我们假设我们正在实现一个行为类似于向量的自定义集合,如果集合为空,我们希望operator[]抛出一些异常。 std::vector在这种情况下有未定义的行为,但我们想抛出异常。如果这是C#,我们可能会抛出InvalidOperationException。但在这种情况下哪个C++ exception最合适/最直观?我觉得std::out_of_range不是最好的选择,因为收集是空的,所以没有'范围'索引将返回有效的(任何)元素。

1 个答案:

答案 0 :(得分:4)

std::vector::at已经这样做了。因此,您可以使用convenience init方法代替at。它会为无效索引抛出operator []

请注意,您必须做大量工作才能达到std::out_of_range的效果。但是如果你想坚持自己的容器并且想要从std::vector抛出,那么像[]方法at是标准异常类中的最佳选择。否则,您需要定义自己的自定义异常类。