1. 程式人生 > >C++異常的標準用法

C++異常的標準用法

C++標準本身提供的異常類完全能夠滿足任何規模程式的使用

其機制如下:

1 exception

a)C++提供了標準異常類exception,這個類是所有標準異常的基類,其解構函式為虛擬函式

b)提供統一介面 const char* what() const 來作為各種標準異常對外的唯一介面

c)捕獲任何標準異常只需要捕獲這個類的引用即可捕捉到各種標準異常

d)之所以需要各種異常型別是因為可以在某個區域性程式碼中只捕獲某一種派生異常,其他異常留到外面去處理,認為當前地方處理不了。

2 各種標準異常

a)標準異常的建構函式必須提供顯示異常型別以及字串引數作為建構函式的引數

b)也就是說異常發生之後我們只需要catch到這個異常並呼叫what方法看看發生了什麼事情就足夠了

c)如果你用字串作為丟擲異常的型別,你只能捕獲字串型別的異常,而不可能是string,也不可能是任何標準異常

d)丟擲什麼型別就只能捕獲什麼型別,或者這個型別的基型別。

e)自定義異常型別基本上可以認為是多此一舉(在眾多工程中管理這個異常類的標頭檔案和原始檔不勝其煩),因為我們只需要獲取what就可以解決問題

 

3 標準用法示例程式碼

void testException(void)
{
	try
	{
		int a = 0;
		throw runtime_error("runtime_error");
	}
	catch (exception& e)
	{
		cout << "catched:" << e.what() << endl;
	}

	try
	{
		int a = 0;
		throw logic_error("logic_error");
	}
	catch (exception& e)
	{
		cout << "catched:" << e.what() << endl;
	}

	try
	{
		int a = 0;
		throw "str_error";
	}
	catch (const exception& e)
	{
		cout << "catched exception : " << e.what() << endl;
	}
	catch (const string& e)
	{
		cout << "catched string : " << e.c_str() << endl;
	}
	catch (const char* e)
	{
		cout << "catched const char * :" << e << endl;

	}
}