試想兩個相似的代碼段:拋出和拋出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