問題: 如何判斷乙個函式是否會丟擲異常,以及丟擲哪些異常?
/** 可能丟擲任何異常 */
void func1();
/** 只能丟擲的異常型別: char 和 int */
void func2() throw(char, int);
/** 不丟擲任何異常 */
void func3() throw();
問題: 如果丟擲的異常不在宣告列表中,會發生什麼?
#include using namespace std;
void func() throw(int)
int main()
catch(int)
catch(char)
return 0;
}
輸出:[g++]
func()
terminate called after throwing an instance of 'char'
已放棄輸出:[vc2010]
func()
catch(char)
注意:g++ :編譯後可執行程式異常停止
vc++2010 :func(); 丟擲的異常被**獲
呼叫 set_unexpected() 設定自定義的異常函式
#include using namespace std;
void my_unexpected()
void func() throw(int)
int main()
catch(int)
catch(char)
return 0;
}
輸出:[g++]
func()
void my_unexpected()
catch(int)
輸出:[vc++2010]
func()
catch(char)
總結:
對於異常規格說明,不同的編譯器有不同的行為。在實際專案中,可編寫測試程式檢視使用的編譯器有沒有遵循 c++ 規範。
C 解析 外傳篇 2 函式的異常規格說明
1.異常規格說明 2.unexpected 函式 3.小結 問題 如何判斷乙個函式是否會丟擲異常,以及丟擲哪些異常?異常規格說明的意義 問題 如果丟擲的異常不在宣告列表中,會發生什麼?下面的 的輸出什麼?示例 異常規格之外的異常 include using namespace std void fu...
函式的異常規格說明
問題 如何判斷乙個函式是否會丟擲異常,以及丟擲哪些異常?假設在開發的時候,呼叫乙個函式來完成某項任務,這個函式不是你寫的或者是第3庫中的乙個函式,那麼問題來了,你如何確定這個函式會不會丟擲異常呢?為什麼要搞清這個問題,因為我們學習了異常處理,那麼我們在呼叫乙個函式的時候,就必須考慮這個函式會不會丟擲...
71 函式的異常規格說明
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 函式的異常規格說明 1 問題 如何判斷乙個函式是否會丟擲異常,以及丟擲哪些異常?1 給函式宣告丟擲異常 2 檢視文件 2 c 提供語法用於宣告函式所丟擲的異常 3 異常宣告...