在c ++中,< stdexcept>有一个“域错误”的基类,std :: domain_error。我不明白在什么情况下我应该在我的代码中抛出域错误。所有其他异常基类都非常自我解释。我很确定std :: domain_error本身与互联网域名无关,所以请解释域错误的错误类别并提供一些示例。
答案 0 :(得分:12)
处理数学函数时都会使用域和范围错误。
一方面,函数的域是函数可以接受的一组值。例如,根平方函数的域是正实数的集合。因此,当函数的参数未包含在其域中时,将抛出domain_error
异常
另一方面,函数的范围是函数可以返回的值集。例如,像这样的函数的范围:
f(x) = -x²
是负实数的集合。那么range_error
有什么意义呢?如果函数的参数在其域中,那么结果必须在其范围内,因此我们不应该在范围内有任何错误...但是,有时值可以定义,但没有可表示。例如,在C中,<math.h>
中的函数会在返回值过大(或太小)的情况下生成错误,以表示
答案 1 :(得分:6)
域错误是指数学域函数的问题。有时仅为某些值定义函数。如果您尝试使用不属于其域的参数调用此类函数,那就是域错误。
例如,尝试使用否定参数调用sqrt()
是域错误,因为负数不属于sqrt()
域的一部分。
答案 2 :(得分:2)
这是“域”错误类的逻辑错误。这可以应用于函数的输入超过其允许操作的允许域的任何情况。这是它在标准中的明确目的。
例如,你有一个只接受正浮点数的函数,所以它会为负数抛出一个domain_error。
答案 3 :(得分:2)
非常好的解释形式cplusplus.com:
通常,数学函数的域是为其定义的值的子集。例如,平方根函数仅针对非负数定义。因此,这种函数的负数将是域错误。
答案 4 :(得分:2)
嗯,这是您从C ++标准中获得的所有指导:
类domain_error定义了 作为异常抛出的对象类型 通过实施来报告域名 错误。
域名在这里意味着“问题域”,与互联网无关。例如,如果传递负数,则平方根函数可能会抛出域错误。
答案 5 :(得分:1)
它指的是数学领域。
float MySqrRoot(float x)
{
// sqrt is not valid for negative numbers.
if (x < 0) throw new domain_error;
//...
}
答案 6 :(得分:1)
“详细说明 由图书馆或您引发,报告域错误(数学意义上的域)。 “
来自:http://www.aoc.nrao.edu/~tjuerges/ALMA/STL/html/classstd_1_1domain__error.html
根据这一点,如果您输入的输入不符合您在界面上的约束,则应该使用它。比如说,一个应该接收正值并且给出负值的函数。