在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");
}
上圖就是程序運行的結果,可以拋出任意類型的異常。
那么未知的類型的異常要怎么捕獲呢?其實也很簡單,接下來讓代碼告訴我們,還是剛才的代碼,改一下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");
}
代碼執行后如圖:
說明我們已經捕獲到該異常。
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");
}
上圖就是程序運行效果。
好了C++的異常處理就說到這里了,如是發現有錯誤的地方,可以留言給我,大家共同學習。