在C++中,<stdexcept> 有一个基类用于“域错误”,即std::domain_error。我不理解在什么情况下应该在我的代码中抛出域错误。所有其他异常基类都很简单明了。我相信std::domain_error与互联网域名本身无关,请解释一下域错误是什么类别的错误并提供一些示例。
处理数学函数时,域错误和值域错误都会被使用。
一方面,函数的定义域是可以被函数接受的值的集合。例如,平方根函数的定义域是正实数集。因此,当函数的参数不在其定义域中时,应抛出domain_error
异常。
另一方面,函数的值域是函数可以返回的值的集合。例如,像这个函数的值域:
f(x) = -x²
这是负实数的集合。那么range_error
有什么意义呢? 如果函数的参数在其定义域内,则结果必须在其值域内,因此我们不应该出现与范围相关的错误... 但是,有时候值可以被定义,但却无法被表示。例如,在C语言中,<math.h>
中的函数如果返回值过大(或过小)而无法表示,则会生成错误。
域错误指的是函数的数学域存在问题。有时候函数只在某些值上有定义。如果你试图使用不属于其域的参数调用这样的函数,那么就会产生域错误。
例如,尝试使用负参数调用sqrt()
就是一个域错误,因为负数不属于sqrt()
的域。
好的,这是C++标准提供的所有指导:
类domain_error定义了由实施抛出的对象的类型,以报告域错误。
这里的域指的是“问题域”,与互联网无关。例如,如果传递一个负数给平方根函数,它可能会抛出一个域错误。
这是针对“域”错误类别的逻辑错误。这可能适用于任何输入函数超过其允许操作的域的情况。这是标准中明确规定的目的。
例如,您有一个只接受正浮点数的函数,因此它会为负数抛出一个域错误。
它指的是数学领域。
float MySqrRoot(float x)
{
// sqrt is not valid for negative numbers.
if (x < 0) throw new domain_error;
//...
}