读取格式不正确的文件时应该抛出什么类型的std :: exception?

时间:2014-10-16 00:17:43

标签: c++ exception std

只是想知道在解析C ++格式不正确的文件时,是否存在关于什么类型的std :: exception适合抛出的协议。我会说一个通用的std::logic_error,即使它不是逻辑,但数据有什么不对,你们认为它应该是什么?

2 个答案:

答案 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例外。任何类都可以作为异常抛出。在大型应用程序中,您通常会找到整个类,其唯一目的是将它们的实例作为异常抛出,这样当它被捕获时,异常处理程序可以获得更多信息和上下文来决定下一步行动(当然,这是在它被抛出之前准备并放入类实例中的。)