【发布时间】:2018-02-08 03:05:38
【问题描述】:
假设我们正在实现一个行为类似于向量的自定义集合,如果集合为空,我们想让operator[] 抛出一些异常。 std::vector 在这种情况下具有未定义的行为,但我们想抛出异常。如果这是 C#,我们可能会抛出 InvalidOperationException。但是在这种情况下,哪个C++ exception 是最合适/最直观的?我觉得std::out_of_range 不是最佳选择,因为集合是空的,因此没有“范围”可供索引返回有效的 (any) 元素。
【问题讨论】:
-
实际上我认为
std::out_of_range确实是我会使用的例外。如果容器为空,则任何索引都超出范围,这与std::vector的行为方式相同。记住一个空集仍然是一个集(在数学意义上) -
恕我直言,我想每个人都会理解您对
std::out_of_range的使用。甚至您链接到的参考站点也有 定义了要作为异常抛出的对象类型。它会报告由于尝试访问超出定义范围的元素而导致的错误。 非常适合这种情况。 -
vector::at会在vector为空的时候抛出std::out_of_range,所以我相信它确实是正确的异常使用。 -
一个空范围仍然是一个范围,它只是特别之处在于任何索引都超出了它
标签: c++ exception error-handling exception-handling