Dim*_* C. 5 c# java exception-handling exception
Java有编译器检查异常.当我转换到C++时,我了解到它没有检查异常.起初,我一直在使用异常处理,因为它是一个很棒的功能.但是,过了一段时间我放弃了它,因为我遇到了一种情况,每个函数都可能抛出异常.由于我编写的函数中只有一小部分可以抛出异常(比如说最多只有25%),我发现对不能抛出任何不可接受的函数进行异常处理的开销.
因此,我很惊讶有很多开发人员更喜欢未经检查的异常.因此,我很想知道他们是如何处理这个问题的.如果语言不支持检查异常,您如何避免执行不必要的异常处理的开销?
备注:我的问题同样适用于C++和C#,也可能适用于所有其他不具备编译器检查异常处理功能的语言.
小智 16
简单.你不会在"每个可能抛出的函数"中进行异常处理 - 在C++中,几乎每个函数都可以这样做.相反,您可以在应用程序中的某些关键点执行此操作,您可以在其中生成合理的,特定于应用程序的诊断并采取合理的,针对特定应用程序的纠正措施,尽管使用RAII习语意味着(正如avakar在其答案中指出的那样)通常很少采取纠正措施.
Jon*_*eet 11
当我第一次开始使用C#时,我也很害怕.然后我发现实际上,这并不常见.我很少发现我可以捕获一个异常,所以对它有用的东西......几乎所有的异常都会冒泡到堆栈顶部附近的某个地方,在那里它们通过中止请求或其他任何东西来处理.
现在,当我编写Java时,我发现检查的异常在很多时候都非常令人沮丧.我认为那里有价值,但它引入了许多问题,因为它解决了.
基本上,我认为我们还没有真正完成错误处理方面的"正确",但总的来说,我更喜欢采用C#方法来实现Java方法.