试想两个相似的代码段:抛出和抛出arg捕获异常有什么区别?
try {
[...]
} catch (myErr &err) {
err.append("More info added to error...");
throw err;
}
和
try {
[...]
} catch (myErr &err) {
err.append("More info added to error...");
throw;
}
有效这些是相同的,还是他们在一些微妙的方式有什么不同?例如,第一个是否会导致拷贝构造函数被运行,而第二个可能会重用同一个对象来重新抛出呢?
啊,我完全忘了切片!该死的,这很重要!感谢您提出这个问题。 +1(尽管我认为当你写下“...保留原始静态类型...”时,你的意思是_dynamic_type。所谓_dynamic type_,毕竟如果不是_“original static type”_。) - – sbi 2009-09-26 23:58:36
太棒了回答,我也完全忘记了这一点。 – GManNickG 2009-09-27 00:10:29
我很高兴别人遇到_slicing_问题;) – 2009-09-27 00:37:22