想象一下两个相似的代码片段:
try {
[...]
} catch (myErr &err) {
err.append("More info added to error...");
throw err;
}
Run Code Online (Sandbox Code Playgroud)
和
try {
[...]
} catch (myErr &err) {
err.append("More info added to error...");
throw;
}
Run Code Online (Sandbox Code Playgroud)
这些是否实际相同,或者它们是否以某种微妙的方式不同?例如,第一个是否导致复制构造函数运行,而第二个可能重用相同的对象来重新抛出它?
C++之间的区别是什么?
try { /*some code here*/}
catch(MyException& ex)
{ throw ex;} //not just throw
Run Code Online (Sandbox Code Playgroud)
和
try { /*some code here*/}
catch(MyException& ex)
{ throw;} //not throw ex
Run Code Online (Sandbox Code Playgroud)
它只是在堆栈跟踪中(在C++中,在任何情况下都不是C#或Java中的标准)?
(如果它有任何区别,我使用MSVS 2008.)