c++ - 纠正 C++ 中的异常

标签 c++ exception-handling

我只是在学习如何处理我的 C++ 代码中的错误。我写了这个例子,它寻找一个名为 some file 的文本文件,如果找不到就会抛出异常。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
int array[90];
try
{
   ifstream file;
   file.open("somefile.txt");
   if(!file.good())
    throw 56;
}
catch(int e)
{
    cout<<"Error number "<<e<<endl;
}
return 0;
}

现在我有两个问题。首先,我想知道我是否正确使用了异常。其次,(假设第一个是正确的)与 If else 语句相比,使用它们有什么好处?

最佳答案

“正确”是一种值(value)判断,但是(与其他类不同)异常类是一个单一的层次结构有一个主要好处,所以我通常建议抛出从 std::exception 派生的东西, 只是一个 int。

其次,不正确的文件名是否足以出乎意料地成为引发异常的充分理由,这一点值得商榷。

关于好处与 if/else 语句:有几个。首先,异常可以让您隔离处理错误的代码,因此代码的主要思想和可读性不会迷失在错误处理的迷宫中。其次,当你在抛出和捕获异常之间有好几层代码时,抛出异常的代码可能不知道应该如何处理它。例如,您的代码使用 std::cout 来报告问题——但大多数此类代码会在 std::cerr 上报告错误。您可以从一个更改为另一个,而无需对尝试打开文件的代码进行任何更改(可能位于库的深处,并且不知道该应用程序应该使用哪个代码 - 并且可能在应用程序中使用两者都是错误的,并且 MessageBox 是首选)。

关于c++ - 纠正 C++ 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2718779/

相关文章:

c++ - 在代码::Blocks中更改类变量大小写

c++ - 程序在冒泡排序时崩溃?

exception-handling - 我应该如何在 WebAPI 的 Controller 构造函数中处理异常?

perl - 如何在没有位置信息的情况下输出die()消息?

c# - C# 异常中的异常处理

java - 何时为捕获的异常记录堆栈跟踪

处理多个可能的文件位置的 Pythonic 方式? (不使用嵌套尝试)

c++ - 前向声明导致头文件出现问题

c++ - 为什么 getenv() 返回一个非常量字符串

c++ - g++ makefile "was not declared in this scope"用于 winbase.h 中的元素