只是想知道在解析C ++格式不正确的文件时,是否存在关于什么类型的std :: exception适合抛出的协议。我会说一个通用的std::logic_error
,即使它不是逻辑,但数据有什么不对,你们认为它应该是什么?
答案 0 :(得分:2)
考虑Standard C++ exceptions,我会说 runtime_error 最适合这种情况。
的std :: runtime_error
它会报告由于超出程序范围的事件而导致的错误,并且无法轻松预测。
解析文件需要运行时资源(文件本身及其内容仅在运行时确定)。 [0]
然而,我认为定义一个新的异常(例如:将其命名为 file_error 并从 std :: runtime_error 派生)是另一种合理的方法。这样,您可以扩展异常功能,以便您的软件能够更轻松地处理发生的问题。 (您可以将任何功能添加到标准类可以拥有的异常类中。)
可以抛出任何对象(来自任何类)作为例外,但从std :: exception派生自定义异常被认为是一种好习惯,因为它非常适合STL和第三方的例外处理方法(在大多数情况下)。
我个人更喜欢使用自己的例外。
另请阅读类似问题:SO:Confused about std::runtime_error vs. std::logic_error
[0]:如果您将文件系统(及其中的文件)逻辑连接到操作系统,则可以考虑使用 system_error < / em>对于这种情况 - 但解析它并不像这个类别。
答案 1 :(得分:0)
您不仅限于抛出std例外。任何类都可以作为异常抛出。在大型应用程序中,您通常会找到整个类,其唯一目的是将它们的实例作为异常抛出,这样当它被捕获时,异常处理程序可以获得更多信息和上下文来决定下一步行动(当然,这是在它被抛出之前准备并放入类实例中的。)