我正在和我的一个朋友说话,通过我的新代码,我没有对待例外,只是因为我不知道如何在C中做.他的回答让我感到惊讶:“为什么在地狱里你会想要throw throw?我问他为什么,但他没有一个令人满意的答案,所以我googled它.我发现的第一页之一是一个博客条目,那个发布的人并不完全反对例外,但在回复中开始了一场宗教战争:
http://weblogs.asp.net/alex_papadimoulis/archive/2005/03/29/396141.aspx
现在我开始怀疑:抛出异常是不是很糟糕?对于像我这样的学生来说,使用异常作为一般事情来学习编程是错误的吗? (当我抛出异常时,我抓住他们在另一个级别的代码来对待他们,大多数时候).我有一个代码示例,我想知道我该怎么办
int x; cout << "Type an integer: "; cin >> x;
在那里输入的不是整数的任何东西都会触发一个异常,对吧?这个例外应该在那里处理.但是当我在程序中其他地方使用的类中有可能的异常时,应该使这个方法抛出一个异常,所以我可以把它当作任何地方来处理它,或者当它有任何问题时,它会返回一个标准值?
例外总是好的,总是坏的,还是在“特殊”情况下使用的东西?为什么?
解决方法
默认情况下,C iostreams类不使用异常处理.通常情况下,应该会发生错误的异常,但这种错误是“异常”和“不频繁”(例如磁盘发生故障,网络关闭等).对于您期望的错误条件(例如用户提供无效输入),您应该不应该使用异常处理,除非需要处理这种情况的逻辑远远超出了检测到这种情况的逻辑,其中使用异常的情况是要走的路.使用异常没有什么问题,并且使用例外,他们是值得的绝对是好的…只是避免使用它们,如果…其他工作正常.
至于为什么:
>例外通常提供一种简单,优雅的处理意外错误的方式,但是:>根据编译器和平台的异常传播可能比普通的控制流慢,所以如果你可以在本地处理这种情况,那么这至少会一样快…而且你特别不想放慢速度常见的,预期的情况(如无效输入).也:>异常需要更多的类型信息存在,并且还需要与抛出或捕获异常无关的代码为“异常安全”,这就是为什么某些对象异常.