range_error
有人可以解释,out_of_range
和一对overflow_error
and之间的区别是什么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
?这些真的合适吗?