C++ C++;:std::logic\u错误异常的适当用途是什么?

C++ C++;:std::logic\u错误异常的适当用途是什么?,c++,exception,C++,Exception,如果您在代码中使用std::logic\u error exception,在什么情况下使用它?logic\u error是这些异常的基础: 域错误,无效参数,长度错误,超出范围 这些都是逻辑错误:一些输入错误,导致输出不合逻辑。所以我想说你通常不需要直接使用它,因为这四种方法涵盖了我能想到的任何逻辑错误。但是这些让你对类别有了一个概念。正如GMan已经指出的,它主要是其他异常类的基础。你可以考虑直接使用它来做基本上是断言的事情。例如,如果某些代码依赖于某个特定对象在执行前已被构造,则如果该代码

如果您在代码中使用std::logic\u error exception,在什么情况下使用它?

logic\u error
是这些异常的基础:
域错误
无效参数
长度错误
超出范围


这些都是逻辑错误:一些输入错误,导致输出不合逻辑。所以我想说你通常不需要直接使用它,因为这四种方法涵盖了我能想到的任何逻辑错误。但是这些让你对类别有了一个概念。

正如GMan已经指出的,它主要是其他异常类的基础。你可以考虑直接使用它来做基本上是断言的事情。例如,如果某些代码依赖于某个特定对象在执行前已被构造,则如果该代码已执行且该对象尚未构造,则该代码可能适合抛出一个
logic\u error
(而不是派生代码)。

当我们捕获代码中的错误时,是否适合抛出logic\u error异常?e、 g.使用它而不是assert()。可能不会<代码>断言是针对程序员错误的。检查某个内容是否为空,等等,不应该发生的事情,不管用户输入如何。相反,例外是指那些偶尔会发生的事情,它们会被捕获和处理。@GMan,我也是这么想的。另请参见Eric Lippert的意见:此处关于SO的讨论:@ShaChris23,
assert
可以非常优雅地退出,为您提供一个行号和发生错误的文件名,甚至显示失败的情况。我认为,任何异常都会不那么优雅地退出。好吧,顾名思义,它被用来弥补程序逻辑中的缺陷,这些缺陷本可以(至少在理论上)通过更好的编码来防止。(这是与
std::runtime\u error
的主要区别)因此,从某种意义上说,它也适用于
assert
常用的地方。