我理解try
和catch()
用于异常处理,以防在某些情况下程序中发生错误或崩溃。我也明白他们是如何工作的。但为什么要使用try
和catch()
?为什么不只使用查找某个案例的if()
语句,如果这种情况属实,它会cout << //error code
?
答案 0 :(得分:13)
异常处理:
X
- 支持符号x1 = x2 + x3
- 哪里可以返回错误代码?答案 1 :(得分:5)
try...catch
做得更多。它解除了自从输入try
以来为所有自动分配的对象调用析构函数的堆栈。如果按照建议的方式执行此操作,则必须手动跟踪这些对象,否则会出现内存问题(泄漏,覆盖,过时指针,双重删除)
答案 2 :(得分:1)
另一个原因是:您编写的代码也可能被其他人用作大型项目的一部分。并且由于使用内置的异常处理例程是一个标准,大型项目的维护者期望您同样处理异常,以便可以在较高级别正确地实现异常处理 - 更不用说使用标准的事实输出作为错误输出是一种可疑的做法(例如,可能会被抑制;或根本不被使用)。
UPD:我误解了你的问题。我描述的原因实际上证明了手动异常抛出的合理性,但没有使用try...catch
块。
答案 3 :(得分:-2)
我将以我的一位英雄,ZeroMQ成名的MartinSústrik的引述回答,摘自http://www.250bpm.com/blog:4的博客文章
然而,当您的目标是保证不会发生未定义的行为时,避免直接故障的好处就变成了一场噩梦。提升异常和处理异常之间的脱钩,使得在C ++中避免失败如此简单,使得几乎不可能保证程序永远不会运行信息未定义的行为。
然后添加,我发现我使用try / catch来获得非常高的杠杆重启层,而不是其他任何东西。补充一点,我的意见真的没关系。我相信,使用异常处理的方式和原因背后的选择非常类似于喜欢绿色而不是蓝色的选择。个人,没有其他人的意见可能会改变它。
答案 4 :(得分:-2)
这个问题构成了一个错误的二分法。在Java和C#try
- catch
中与if
竞争以便在失败时进行清理。在C ++中,主要是RAII技术(使用析构函数和单阶段构造)与if
竞争以便在失败时进行清理。
如果问题是关于使用异常而不是使用if
,那么它对于普通的C ++编程会更加明智和相关。