C++ 異常處理

Andy Niu發表於2013-12-13

1、異常處理分為兩個部分:丟擲異常和捕獲異常。

2、丟擲異常,類似於方法返回值,離開了作用域,區域性物件銷燬,因此需要有一個臨時物件儲存結果。C++特別強調,丟擲一個異常,必定要一個臨時物件接收,存在copy構造,這是不可避免的,因為丟擲的異常已經離開了作用域,失去了控制權。

3、捕獲異常,類似於呼叫方法,將臨時物件傳遞給catch中的區域性物件,為了避免再次copy構造,catch語句應該使用引用。特別注意,內建型別的臨時物件是不可修改的,也就是說,內建型別的臨時物件不能賦值給non-const引用,但是異常物件是可以的,catch語句可以是non-const引用。

4、捕獲異常與呼叫方法的區別:

  a、捕獲異常是最先匹配,呼叫方法是最有匹配。

  b、呼叫方法存在隱式型別轉換,即int可以傳遞給被調方法中的double形參,捕獲異常是不會發生的。二者相同的是,滿足里氏代換的情況,可以匹配成功。