gpt4 book ai didi

C++新手问题--使用try、throw、catch的基本错误处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:58 26 4
gpt4 key购买 nike

我正在尝试了解 C++ 中的错误处理。

我读到过,使用 try、throw、catch 比使用带有返回值的 if 语句更好,也更简单。但我不确定我是否真的理解 try, throw, catch 是如何工作的。我在下面做了一个简单的例子,如果能得到关于任何问题或不良风格的反馈,那就太好了。我的目标是根据示例创建一个函数来检查另一个计算的结果。

以下是我对 try、throw、catch 的疑问:(1) catch 语句应该包含在我的函数中吗?或者它应该在其他地方,比如在 main() 中或在完成初始计算的函数中?

(2) 对这么简单的事情使用 try、catch、throw 是不是太过分了(我想改进我的风格)?

(3) 如果有错误,我想终止程序。我该怎么做?还是“catch”意味着自动完成?

(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;
}

最佳答案

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

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

(2) 作为经验法则,对...异常的事情使用异常。错误是异常事物的良好候选者。对于数学库中的溢出或被零除之类的事情,可能会抛出异常。您必须做出决定,但一般来说,处理带有异常的错误是件好事。

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

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

我的2c

关于C++新手问题--使用try、throw、catch的基本错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com