我總是按價值捕捉異常。例如try{...}catch(CustomException e){...}但是我遇到了一些替代的代碼catch(CustomException &e)。這是a)很好b)錯誤c)是灰色區(qū)域嗎?
3 回答

烙印99
TA貢獻1829條經(jīng)驗 獲得超13個贊
C ++中的例外情況的標準做法是...
按價值投擲,按參考捕獲
面對繼承層次結構,按值捕獲是有問題的。對于您的示例,假設存在另一種類型MyException,該類型繼承CustomException并覆蓋諸如錯誤代碼之類的項。如果MyException引發(fā)了類型,則catch塊將導致將其轉換為CustomException實例,這將導致錯誤代碼更改。

Smart貓小萌
TA貢獻1911條經(jīng)驗 獲得超7個贊
如果異常是您捕獲的類型的派生類型,則按值捕獲將對異常對象進行切片。
這對于catch塊中的邏輯可能或不重要,但是沒有理由不通過const引用進行捕獲。
請注意,如果throw;在catch塊中沒有參數(shù),則無論您是否捕獲切片副本或?qū)Ξ惓ο蟮囊茫紝⒅匦乱l(fā)原始異常。

慕斯王
TA貢獻1864條經(jīng)驗 獲得超2個贊
除非您想擺弄異常,否則通常應使用const引用:catch (const CustomException& e) { ... }
。編譯器處理拋出對象的生存期。
- 3 回答
- 0 關注
- 412 瀏覽
添加回答
舉報
0/150
提交
取消