我想问this question (也是 here ),但这次是关于 C++。
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。)
最佳答案
throw;
重新抛出它捕获的同一个异常对象,而 throw ex;
抛出一个新异常。除了创建新异常对象的性能原因之外,它没有任何区别。如果您有一个异常层次结构,其中有一些其他异常类派生自 MyException
类,并且在抛出异常时您已经完成了 throw DerivedClassException;
它可以被 catch(MyException&)
。现在,如果您修改此捕获的异常对象并使用 throw;
重新抛出它,异常对象的类型仍将是 DerivedClassException
。如果您执行 throw Ex;
,则会发生对象切片,并且新抛出的异常将是 MyException
类型。
关于c++ - 在 C++ 中, “throw” 和 “throw ex” 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833982/