谁能解释一下 range_error
、out_of_range
以及 overflow_error
和 underflow_error
之间的区别是什么,我什么时候应该使用它们?它们看起来都一样。
根据 cppreference.com :
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
似乎是为了 float ? (但为什么要用 C++ 这样的语言呢?)underflow_error
和overflow_error
?这些真的合适吗?
最佳答案
来自标准:
range_error
:range_error 类定义了作为异常抛出的对象类型,以报告内部计算中的范围错误。
out_of_range
:out_of_range 类定义了作为异常抛出的对象类型,以报告参数值不在其预期范围内。
overflow_error
:overflow_error 类定义了作为异常抛出以报告算术溢出错误的对象类型。
underflow_error
:underflow_error 类定义了作为异常抛出的对象类型,以报告算术下溢错误。
对于您的函数,最合适的是 out_of_range
。
关于c++ - out_of_range、range_error 和 over/underflow_error 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978863/