我是C++的新手。我看到一些使用catch
塊的代碼示例,其中異常被值捕獲。例如:通過引用捕獲對象
catch(SomeClass e)
我也看到一些例子,通過參考趕上:
catch(const std:: out_of_range& e)
我假設在異常被抓住了參考的情況下,應當由const
參考。
我的問題是,什麼時候推薦使用每種方式,每種方式的優點/缺點是什麼?
謝謝!
我是C++的新手。我看到一些使用catch
塊的代碼示例,其中異常被值捕獲。例如:通過引用捕獲對象
catch(SomeClass e)
我也看到一些例子,通過參考趕上:
catch(const std:: out_of_range& e)
我假設在異常被抓住了參考的情況下,應當由const
參考。
我的問題是,什麼時候推薦使用每種方式,每種方式的優點/缺點是什麼?
謝謝!
我想不出有什麼好處,值得捕獲,並導致對象切片的可能性,其中的對象被轉換爲基類和信息丟失。我會一直引用。
有可能修改捕獲的對象並重新拋出它,例如,所以你不要有使它成爲const
引用。但這也是一個好主意。
它的建議,你趕上通過引用異常的原因有兩個:
通過值捕獲異常最終會使得被拋出的異常對象的副本(同樣的方式,傳遞一個參數將使該對象的副本)。儘管異常處理可能有點慢,但仍然值得試圖避免這種低效率。
如果拋出一個派生類型的異常和值catch基本類型,你會片異常相同的方式,傳遞一個派生類型成函數按值將切片該對象。這可能會導致程序中出現不正確或不正常的行爲。
希望這有助於!
想一想:就像拿一個參數,你什麼時候會接受一個多態參數? –