std :: logic_error类是不同种类的std :: invalid_argument,不是吗?

时间:2019-08-31 13:59:06

标签: c++ exception error-handling c++-standard-library

让我们看一下从std::logic_error派生的类:

    当参数超出范围时,会抛出
  • std::out_of_range
  • 指定长度的参数超出支持的值时,抛出
  • std::length_error
  • 当参数超出预期范围时,应该抛出
  • std::domain_error
  • 当使用没有共享状态的std::future_error时抛出
  • std::future(如果我们将对象作为方法的隐藏参数,那么std::future也是一个参数)。
  • li>

似乎所有上述异常都在传递无效参数(无效位置,无效长度,无效未来)时引发。如果是这样,为什么它们不源自std::invalid_argument?我应该从std::invalid_argument中得出错误吗 或来自std::logic_error

是否存在与无效参数用法无关的逻辑错误?

1 个答案:

答案 0 :(得分:3)

前三个例外可能表示某个参数超出范围。

它们还可能表明其他东西不在范围内。

可能是计算的结果,也可能是服务提供的数据。

并非每条信息都是一个论点。


关于future_error

  

如果我们将对象作为方法的隐藏参数,那么std::future也是一个参数

该解释基于实现细节,在设计类层次结构时或在语义上描述事物的作用时,这些细节不应发挥作用。从逻辑上讲,std::future引发异常,而不是某些将std::future作为参数的自由函数。结果,同样,“错误”的东西也不是争论。