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

标签 c++ exception-handling

我想问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/

相关文章:

Python - 引发异常时发送电子邮件?

c++ - Windows/c++-使用 boost 的日期减法(周/月/年)

C++:pthread_create 上的段错误

c++ - 声明为返回 int 的函数不返回任何内容。这是未定义的行为吗?

java - 当一个线程失败时停止 ExecutorService 线程。 & 返回异常

php - 使用基于 Symfony 2 的网站处理生产中的 PHP 错误

c++ - 如何检查静态成员变量模板?

新运算符中的 C++ 转换

Java 异常基本原理

c# - 无论如何,当异常冒出时,我为什么要写 throw ?