什么是域错误

时间:2009-03-13 00:41:53

标签: c++ stl

在c ++中,< stdexcept>有一个“域错误”的基类,std :: domain_error。我不明白在什么情况下我应该在我的代码中抛出域错误。所有其他异常基类都非常自我解释。我很确定std :: domain_error本身与互联网域名无关,所以请解释域错误的错误类别并提供一些示例。

7 个答案:

答案 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

根据这一点,如果您输入的输入不符合您在界面上的约束,则应该使用它。比如说,一个应该接收正值并且给出负值的函数。