C++新手问题 - 使用try,throw,catch进行基本错误处理

Ant*_*Ant 5 c++ exception-handling

我试图理解C++中的错误处理.

我已经读过使用try,throw,catch比使用带有返回值的if语句更好的样式和简单.但我不确定我是否真的理解如何尝试,抛出,抓住工作.我在下面做了一个简单的例子,很高兴获得有关任何问题或不良风格的反馈.我的目标是从检查另一个计算结果的示例中创建一个函数.

以下是关于try,throw,catch的问题:(1)catch语句是否应该包含在我的函数中?或者它应该在其他地方,例如在main()或初始计算的函数中?

(2)使用try,catch,throw这个简单的东西(我希望改进我的风格)是否过度?

(3)如果有错误,我想终止程序.我该怎么办?或者"捕获"是否意味着自动完成?

(4)我不明白使用cerr.为什么不使用cout?我在这里正确使用过cerr吗?我是否也应该在if/else语句中使用它?

非常感谢您的帮助.

这是我做的例子:

double calculated = 10.2; // from previous calculation
double tolerance = 0.3; // I can set this in this function
double valueWanted = 10.0; // from previous calculation

const int calcError = 5; // I picked this number randomly to use for indicating an error

try
{
   if (fabs(fTargetValue - fCalculated) <= fTolerance)
     cout << "Result is within range.";

   else
     cout << "Failed.";
     throw calcError;
}

catch (const int calcError)
{
   cerr << "The calculation failed.\n" << endl;
}
Run Code Online (Sandbox Code Playgroud)

neu*_*uro 4

嗯,这是很多问题。我会尝试给你一些提示:

(1) 不要在函数中包含 try-catch。抛出异常是为了告诉外部世界发生了一些事情。如果您可以在函数中处理问题,则根本不要抛出 ^^ 良好的错误处理通常是尽快捕获错误(在调用者中)或在远离的通用处理程序中(如 main 中),以优雅地处理未处理的错误。

(2) 根据经验,对……特殊的事情使用例外。错误是特殊事物的良好候选者。对于数学库中的溢出或除以零之类的情况,可能会引发异常。您必须做出决定,但一般来说,处理带有异常的错误是好的。

(3)catch并不意味着你的程序将结束。事实上恰恰相反。通过捕获异常,您可以说您将处理问题^^ 如果您想终止,在简单程序中的一个简单方法是不捕获异常,因为未捕获异常的默认行为是程序终止^^ 相反,您可以在某个 catch 块中显式终止您的程序。

(4) cerr 与 cout 类似,但是不同的文件描述符。这意味着外部程序可以区分 cerr 和 cout。它用于错误,但这并不重要,但对于外部程序而言。

我的2c