C++筆記(8):C++異常處理

來源:互聯網
上載者:User

標籤:就會   代碼   多個   安全   解構函式   互動   out   資料類型   over   

                    異常處理

  C++異常處理機制是一個用來有效地處理運行錯誤的非常強大且靈活的工具,它提供了更多的彈性、安全性和穩固性,克服了傳統方法所帶來的問題.
    異常的拋出和處理主要使用了以下三個關鍵字: try、 throw 、 catch 。
try語句
  try代碼塊由關鍵字try以及後面的一對大括弧組成,大括弧中定義的代碼塊,就是可能出現異常的代碼。try代碼塊中包含了可能引起異常的語句以及發生異常時應該跳過的語句。(也就是可能引起異常的函數以及沒有異常發生時應該執行的語句)。異常可能是由try代碼塊中的代碼直接導致的,也可能是由於調用其它函數導致的,還有可能是由於try代碼塊中的代碼所發起的深層嵌套函數調用所導致的。 
catch語句 
  異常是由catch處理器處理的,他會捕獲並處理異常。在每個try代碼塊之後,必須至少緊挨著一個catch處理器。每個catch處理器都以關鍵字catch開始,並在一對圓括弧中指定一個異常參數(exception parameter),表示它能夠處理的異常的類型(DivideByZeroException)。當try代碼塊發生異常時,就會執行異常參數的類型與這個異常匹配的那個catch處理器(即catch代碼塊的類型與被拋出的異常類型準確對應,或者是他的基類)。如果異常參數包含可選的參數名,則catch處理器可以使用這個參數名與catch處理器代碼體重被捕獲的異常互動。
throw語句
     throw語句用來主動拋出異常。如果在try語句塊的程式段中(包括在其中調用的函數)發現了異常,且拋出了該異常,則這個異常就可以被try語句塊後的某個catch語句所捕獲並處理,捕獲和處理的條件是被拋棄的異常的類型與catch語句的異常類型相匹配。由於C++使用資料類型來區分不同的異常,因此在判斷異常時,throw語句中的運算式的值就沒有實際意義,而運算式的類型就特別重要。
 
異常處理的一般格式為:
  try
  {
    //被檢查語句
    throw 異常;
  }
  catch(異常類型1)
  {
    //進行異常處理的語句1
  }
  catch(異常類型2)
  {
    //進行異常處理的語句2
  }
    catch(...)//捕獲所有的異常
   {
   }
在異常匹配的時候,只對類型進行匹配,不關心拋出的異常對象的值。
 
 異常的類型
(1)可以拋出基礎資料型別 (Elementary Data Type)異常,如int和char等; 
(2)可以拋出複雜資料類型異常,如結構體(在C++中結構體也是類)和類; 
(3)C++的異常處理必須由調用者主動檢查。一旦拋出異常,而程式不捕獲的話就會導致程式異常終止。
 
注意事項
(1)try和catch塊中必須要用花括弧括起來,即使花括弧內只有一個語句也不能省略花括弧;
(2)try和catch必須成對出現,一個try_catch結果中只能有一個try塊,但可以有多個catch塊,以便與不同的異常資訊匹配;
(3)如果在catch塊中沒有指定異常資訊的類型,而用刪節號"...",則表示它可以捕獲任何類型的異常資訊

(4)C++中一旦拋出一個異常,如果程式沒有任何的捕獲,那麼系統將會自動調用一個系統函數terminate,由它調用abort終止程式
(5)建構函式內可以拋出異常,解構函式內不要拋出異常。
 
標準異常對象的類型
在C++標準庫中,有些函數拋出特定的異常,而另外一些根本不拋任何異常。
因為C++標準中沒有明確規定,所以C++的庫函數可以拋出任何對象或不拋。

但C++標準推薦運行庫的實現通過拋出定義在<stdexecpt>中的異常類型或其衍生類別型來報告錯誤:
      class logic_error;      
      class domain_error;    
      class invalid_argument; 
      class length_error;     
      class out_of_range;   
       class runtime_error;       
      class range_error;  
      class overflow_error;
      class underflow_error; 

C++筆記(8):C++異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.