C++中如何進行異常處理,及和java中的異常對比

在NDK中使用c++時,當發生異常時怎么處理的,所以今天在此我就給大家說說C++中的異常處理,讓初學C++的小伙伴能夠了解C++中的異常

首先C++中的異常處理要比JAVA中的異常處理要自由,想我們在C++中捕獲到異常時可以向函數外拋任意類型的異常,而在JAVA中的就不能這樣玩了,在JAVA中要么拋指定類型的異常比如 “空指針 異常(NullPointerException)”,要么拋自定義的異常,而在C++就沒有這樣的限制,所以說在c++中拋異常要比在JAVA中拋異常要自由得多了,在下面我們在代碼中體現C++中的異常自由性,同樣在C++中我們要捕獲異常也是用try{}catch(){}語句,和JAVA一樣。

#include <iostream>
using namespace std;
void sun(int a ,int b){
if(b == NULL){
throw "第二個參數不能為空";
    }
}
void main(){
     try{
             sun(10,0);//在c++中0和NULL是一樣的
        }
        catch(char*  s){  //這里的捕獲的異常類型是你拋出的異常類型,我上面拋出的類型是字符串所以我這里是char
             cout<< s<< endl;

        } 
   system("pause");
}
QQ圖片20171118172002.png

上圖就是程序運行的結果,可以拋出任意類型的異常。

那么未知的類型的異常要怎么捕獲呢?其實也很簡單,接下來讓代碼告訴我們,還是剛才的代碼,改一下catch()的參數就可以捕獲任意類型的異常了,改成:catch(...)在括號中英文狀態下三個點即可,不過這樣捕獲異常有一個不足的地方那就是我們不能知道程序發生的什么樣的異常,只是知道代碼中發生了異常。

在java中的不能這樣玩的,必須要指定異常類型,那么在C++中有沒有標準的異常類型呢?是有的。c++中也提供標準異常類型給我們調用。

void show(int index){
    if(index >10){
        throw out_of_range("超出范圍");
     }
}
void main(){
  try{
          show(20) ;
   }catch(out_of_range e){
           cout << e.what() << endl;
   }
   system("pause");
  }

代碼執行后如圖:


QQ圖片20171118173931.png

說明我們已經捕獲到該異常。
c++中提供了十幾種標準的異常類型,這里我就不一一列出了,可以到Vsual Studio中看。
c++中能不能玩自定義的異常呢?也是可以的,那么玩自定義的異常套路和java是一樣的都是集成Exception這個類只不過在c++中exception是小寫的 ,那么下面就來一個定義的異常

 class MyException : public exception{
       public:
                MyException(char* msg) : exception(msg){}
 }
 void show(int index){
        if(index > 10){
                throw MyException("MyException異常");
                //另外一種拋出異常的寫法就是拋出異常指針,但是我個人不推薦拋出異常指針,好果是拋出異常指針忘記釋放,就會造成內存泄露
            // throw new MyException("MyException異常");//這里是動態內存分配,所以當我們這樣寫的時候要釋放內存
         }
 }
 void main(){
        try{
    show(20);
}
catch (MyException& e){ //這里最好用引用,這里我們在用這個異常函數時就不會去創建副本,如是想看一下是否有創建副本,可以重寫一下異常函數的拷貝函數即可看到
    cout << e.what() << endl;
}
system("pause");
  }
QQ圖片20171118200344.png

上圖就是程序運行效果。
好了C++的異常處理就說到這里了,如是發現有錯誤的地方,可以留言給我,大家共同學習。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,733評論 18 399
  • 通俗編程——白話JAVA異常機制 - 代碼之道,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語閱讀 3,191評論 0 25
  • 從沒遇到一個跟我很像的人,或許只是我不想了解別人,所以沒能知道別人隱藏起來的東西。
    Jude_89閱讀 223評論 0 0
  • locust官方文檔 http://www.cnblogs.com/fnng/p/6081798.html pip...
    dittoyy3991閱讀 234評論 0 0
  • (一)巧克力糖的秘密 作文班有個二年級的小女孩叫羽兒,見人愛笑,一笑像個燦爛的小太陽。 有一天,她來上...
    風鈴兒聲聲閱讀 336評論 8 4