C++——異常處理

來源:互聯網
上載者:User

標籤:測試   通知   size   變數   前言   產生   函數   解決   聲明   

前言

大型和十分複雜的程式往往會產生一些很難尋找的甚至是無法避免的執行階段錯誤。當發生執行階段錯誤時,不能簡單地結束程式運行,而是退回到任務的起點,指出錯誤,並由使用者決定下一步工作。物件導向的異常處理(exception handling)機制是C++語言用以解決這個問題的有力工具。函數執行時,放在try(測試)程式塊中的任何類型的資料對象發生異常,都可被throw塊拋出,隨即沿調用鏈退回,直到被catch塊捕獲,並在此執行異常處理,報告出現的異常等情況。從拋出到捕獲,應將各嵌套調用函數殘存在棧中的自動對象、自動變數和現場保護內容等進行清除。如果已退到入口函數還未捕獲則由abort()來終結入口函數。

這裡所講的異常(exception)是程式可能檢測到的,運行時不正常的情況,如儲存空間耗盡、數組越界、被0除等等,可以預見可能發生在什麼地方,但是無法確知怎樣發生和何時發生。特別在一個大型的程式(軟體)中,程式各部分是由不同的小組編寫的,它們由公用介面連起來,錯誤可能就發生在相互的配合上,也可能發生在事先根本想不到的個別的條件組合上。

C++提供了一些內建的語言特性來產生(raise)或拋出(throw)異常,用以通知“異常已經發生”,然後由預先安排的程式段來捕獲(catch)異常,並對它進行處理。這種機制可以在C++程式的兩個無關(往往是獨立開發)的部分進行“異常”通訊。由程式某一部分引發了另一部分的異常,這一異常可回到引起異常的部分去處理(沿著程式函數的調用鏈)。這也是分清處理責任的好辦法。

異常規範

C++函數有2個傳回值,左側是正常返回,右側是異常返回

float Div(int a,int b)預設是拋出所有異常

float Div(int a,int b)throw(int,short,Test)規定只能拋出int、short、Test類型的異常。如果是float類型異常,則無法拋出

異常處理的機制

首先,在C++中異常往往用類(class)來實現,以棧為例,異常類聲明如下:
class popOnEmpty{...}; //棧空異常
class pushOnFull{...}; //棧滿異常

 

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.