C++標准庫提供的邏輯異常包括以下內容。 invalid_argument 異常,接收到一個無效的實參,拋出該異常。 out_of_range 異常,收到一個不在預期范圍中的實參,則拋出。 length_error 異常,報告企圖產生“長度值超出最大允許值”的對象。 domain_error 異常,用以報告域錯誤(domain error)。 C++標准庫提供的運行時異常包括以下內容。 range_error 異常,報告內部計算中的范圍錯誤。 overflow_error 異常,報告算術溢出錯誤。 underflow_error 異常,報告算術下溢錯誤。 bad_alloc 異常,當new()操作符不能分配所要求的存儲區時,會拋出該異常。它是由基類exception 派生的。 以上前 3 個異常是由runtime_error 類派生的。 例子: # include<iostream> # include<vector> #include<stdexcept> using namespace std ; int main() { vector<int> iVec ; iVec.push_back(1) ; iVec.push_back(2) ; iVec.push_back(3) ; try{ cout << iVec.at(5) << endl ; }catch(out_of_range err) { cout << "êy×é????" << endl ; } system("pause"); } 綜合經典實例: #include<iostream> using namespace std; class Exception { public : Exception(string _msg="") { msg = _msg ; } string getMsg() { return msg; } protected: string msg ; }; class PushOnFull:public Exception{ PushOnFull(string msg=""):Exception(msg){} }; class PopOnEmpty:public Exception{ public: PopOnEmpty(string msg = ""):Exception(msg){ } }; class StackException { public: StackException(Exception _e , string _msg ):e(_e),msg(_msg) { } Exception getSource(){ return e ; } string getMsg() { return msg ; } private: Exception e ; string msg ; }; template<class T> class iStack { public: iStack(int _capacity = 64) { capacity = _capacity ; data = new T[capacity] ; top = 0 ; } ~iStack() { cout <<"~iStack is called ... ... "<< endl ; delete[] data ; } void push(T t) throw(Exception) { if (top>=capacity) { throw Exception("???úá?") ; } data[top] = t ; top++ ; } T pop() throw(Exception){ if (top <= 0 ) { throw Exception("???a??") ; } top--; T t = data[top] ; return t ; } private: T* data ; int capacity ; int top ; }; void test() { iStack<int> istack(10) ; try{ for(int i = 0 ; i < 20 ; i++ ) { istack.push(i) ; } int p = istack.pop() ; cout << p << endl ; }catch(Exception e) { cout <<"2???á?"<< endl ; throw StackException(e,"±??a×°á?μ?òì3£") ; } } void test2() { iStack<int> istack(10) ; try{ for(int i = 0 ; i < 20 ; i++ ) { istack.push(i) ; } int p = istack.pop() ; cout << p << endl ; }catch(...) { cout <<"?a??ê?±?D?òa?′DDμ?,??DD×ê?′êí???è"<< endl ; } } int main() { try{ test() ; test2(); }catch(StackException se) { cout << se.getSource().getMsg()<<" " << se.getMsg()<< endl ; } system("pause"); }