C Qt的異常處理

2021-08-10 23:04:53 字數 2338 閱讀 9141

我們寄希望使用異常這種方法,讓乙個函式發現自己無法處理的錯誤時丟擲異常或者做進一步處理。未使用異常處理機制的程式,當遇見無法處理的問題時可能會產生如下後果:

程式自行終止(然後程式設計師開始漫長的找bug過程)

返回乙個表示錯誤的值(很多系統函式都是這樣,例如malloc,記憶體不足,分配失敗,返回null指標)

返回乙個合法值,讓程式處於某種非法的狀態(最坑爹的東西,有些第三方庫真會這樣)

呼叫乙個預先準備好在出現」錯誤」的情況下用的函式。

第一種情況在軟體開發過程中是不明智的,當軟體體量的增大,找bug的過程往往將浪費掉大量時間。第二種情況,比較常用,但是有時不合適,例如返回錯誤碼是int,每個呼叫都要檢查錯誤值,極不方便,也容易讓程式規模加倍。第三種情況,很容易誤導呼叫者。

通過使用異常,把錯誤和相應處理分開。由函式丟擲異常,呼叫者可以根據捕獲異常判斷程式出錯原因和位置,做出相應處理。是否終止程式由呼叫者掌握,而不是任由程式自行宕機。

假設我們寫乙個程式,把使用者輸入的兩個字串轉換為整數,相加輸出

#include 

void main()

假設使用者輸入的是str1,str2,如果str1和str2都是整數型別的字串,這段**是可以正常工作的,但是使用者的輸入有可能誤操作,輸入了非法字元,例如

#include 

void main()

這個時候結果是1,因為atoi(str2)返回0。如果使用者輸入是這樣:

#include 

void main()

那麼這段**會出現段錯誤,程式異常退出。

如果在乙個重要系統中,呼叫者不知情,傳入了乙個null字元,程式就異常退出了,導致服務中斷,或者傳入非法字元,結果返回0。為了解決這種問題,異常處理改造乙個安全的atoi方法,叫parsenumber。

class numberparseexception {};

bool isnumber(char * str)

else

}return isanumber;

}int parsenumber(char * str) throw(numberparseexception)

void main()

catch (numberparseexception)

}

上述**中numberparseexception是自定義的異常類,當檢測的時候傳入的str不是乙個數字時,就丟擲乙個數字轉換異常,讓呼叫者處理錯誤,這比傳入null字串,導致段錯誤結束程式好得多,呼叫者可以捕獲這個異常,決定是否結束程式,也比傳入乙個非整數字串,返回0要好,程式出現錯誤,卻繼續無聲無息執行下去。

防止除數為0

#include 

using

namespace

std;

template

t div(t x,t y)

int main()

catch(double)//異常型別

return

0;

}

求三角形周長

#include 

#include

using

namespace

std;

int ********(int a, int b, int c)

int main()

catch(const runtime_error& e)

在異常處理中處理析構函式

#include 

#include

using

namespace

std;

class student

; void student::get_data( )

int main( )

catch(int n)

在函式巢狀的情況下檢測異常處理

#include

using

namespace

std;

int main( )

catch(double)

void f1( )

catch(char)

cout

<<"end1"

catch(int)

catch(float)

{ cout

<<"ok3!"

<<"end3"

《參考

C Qt 高分屏處理心得

首先自我介紹一下,本人從事c qt方向的畫面開發,工作內容主要是im pc端相關,接下來和大家分享一些經驗之談,希望可以幫助到有需要的同學。今天為大家分享的是c qt處理高分屏的一些心得。在正文之前先為小白分享一些關於高分屏的知識,大神請自行略過 dpi。即dots per inch,它表示每英吋的...

的異常處理 C 異常處理總結

做開發不僅僅要考慮到業務邏輯更要在寫 時將各種可能考慮周全,但是這又是很難的事情,畢竟開發就是個人的事,而使用者可能上萬甚至百萬級別。這時,程式的穩定性就極為重要,我們不能讓程式因為某一處執行出問題而就直接導致程式或者產生其他更嚴重的後果,比如 做除法時當除數為零時,陣列訪問越界時,容器capaci...

的異常處理 質量異常處理方法

在生產過程中雖然有詳細的生產說明書作為參考,但還是會經常發生產品質量異常的現象,而且它對生產效率及質量的影響極大,一線班組長對產品質量異常進行及時有效的確認 分析 處理和追查,是提公升班組生產效率 生產良率和產品質量的關鍵,那麼如何進行產品質量異常處理呢?一 確認發生質量異常的產品 確定發生質量異常...