Tha*_*tos 10 c++ exception outofrangeexception
有人能解释什么之间的差异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 ??? }
Run Code Online (Sandbox Code Playgroud)
哪里T是整体类型; 该函数进行一些边界检查n,看它是否在一定范围内; 如果不是,我想抛出一些例外.我很困惑,因为:
out_of_range 听起来像索引和数组边界检查,我没有做.range_error似乎是花车?(但为什么,用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。
我没有考虑太多,但我的指导方针似乎是:
out_of_range当我的抽象可以被认为是一系列的桶或鸽子(离散)时,我要求一个不存在的桶或鸽子。主要的例子是请求三元素数组的第四个元素(数组中的槽可以被认为是桶)。
range_error当请求的操作在所考虑的域中没有数学意义时(例如,处理实数域时负数的平方根)。
overflow_error当underflow_error结果超出基础类型的容量时。例如:一个大于我的int.