【发布时间】:2014-04-10 04:48:01
【问题描述】:
有人能解释一下range_error、out_of_range 和overflow_error 和underflow_error 之间的区别,我什么时候应该使用它们?它们看起来都一样。
-
out_of_range:它报告由于尝试访问超出定义范围的元素而导致的错误。 -
range_error:它报告由于某些计算中的浮点值太大或太小而无法表示而出现的错误。如果值是整数类型,则应使用std::underflow_error或std::overflow_error。 -
overflow_error:它报告由于整数值在某些计算中的正值太大而无法表示而出现的错误。
具体来说,我有一个函数,
template<typename T>
void write_integer(const T &n) {
if(n < 0) { throw ??? }
if(some_limit < n) { throw ??? }
其中T是一个整数类型;该函数对n 进行一些边界检查,以查看它是否在某个范围内;如果不是,我想抛出一些异常。我很困惑,因为:
-
out_of_range听起来像是用于索引和数组边界检查,我没有这样做。 -
range_error似乎是用于花车的? (但是为什么,在像 C++ 这样的语言中呢?) -
underflow_error和overflow_error?这些真的合适吗?
【问题讨论】:
-
超出范围 = 输入值没有意义。其余的 = 输出值或中间值都无法表示。您可能需要考虑 std::domain_error。
标签: c++ exception outofrangeexception