在C中,“throw”和“throw ex”之间有区别吗?

我想问this question(也是here),但这次是关于C.

C之间有什么区别?

try { /*some code here*/}
catch(MyException& ex)
{ throw ex;} //not just throw

try {  /*some code here*/}
catch(MyException& ex)
{ throw;} //not throw ex

它只是在堆栈跟踪(C在任何情况下都不是C#或Java中的标准)?

(如果有任何区别,我使用MSVS 2008)

最佳答案
扔;抛出同样的异常对象,抛出它;抛出一个新的异常.除了创建新异常对象的性能原因之外,它没有什么不同.如果你有一个例外层次结构,那里有一些其他的异常类派生自MyException类,同时抛出一个异常,你已经完成了一个抛出DerivedClassException;它可以被catch捕获(MyException&).现在,如果你修改这个被捕获的异常对象,并用throw抛出它;异常对象的类型仍将是DerivedClassException.如果你抛出Ex;发生对象切片,新抛出的异常将为MyException类型.

转载注明原文:在C中,“throw”和“throw ex”之间有区别吗? - 代码日志