C++Primer:Break、Continue、Goto、Try/异常处理
生活随笔
收集整理的這篇文章主要介紹了
C++Primer:Break、Continue、Goto、Try/异常处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.break語句:
break語句用于結束最近的while、do while、for、switch語句,并將程序的執行權傳遞給緊接在被終止語句之后的語句。 <span style="font-size:18px;"># include <iostream> #include <vector> using std::vector; using std::cout; using std::endl; int main() {vector<int> vect;for(int i = 0;i<50; i++){vect.push_back(i);}for(vector<int>::iterator iter = vect.begin();iter != vect.end(); ++iter){cout<<*iter<<" ";}vector<int>::iterator iter1 = vect.begin ();while(iter1 != vect.end ()){if(*iter1 == 47 )break; // OK: Find it;else++iter1; // Not Find, Keep Looking}cout<<endl; //break to here...cout<<*iter1;return 0; }</span>需要注意的是,break只能出現在循環或者switch結構中,或者出現在嵌套于循環或switch結構中的語句里。
2.continue語句:
continue 語句只能出現在 for、while 或者 do while 循環中,包括嵌套在這些循環內部的塊語句中。3.goto語句:
goto語句提供了函數內部的無條件跳轉,從而實現goto語句跳轉到同一函數內某個帶標號的語句。(從上世紀60年代后期開始,不主張使用goto語句。goto語句使跟蹤程序控制流程變得很困難,并且使程序難以理解,也很難修改)4.Try塊與異常處理:
在設計各種軟件系統的過程中,處理程序中的錯誤和其他反常行為是困難的部分之一。像通信交換機和路由器這類長期運行的交互式系統必須將90%的程序代碼用于實現錯誤檢測和錯誤處理。隨著基于Web的應用程序在運行時不確定性的增多,越來越多的程序員更加注重錯誤的處理。 異常就是運行時出現的不正常,例如運行時耗盡了內存或遇到意外的非法輸入。異常存在于程序的正常功能之外,并要求程序立即處理。 異常機制提供程序中錯誤檢測與錯誤處理部分之間的通信。C++的異常處理中包括: 1.throw表達式,錯誤檢測部分使用這種表達式說明遇到了不可處理的錯誤。可以說,throw引發了異常條件。 2.try塊,錯誤處理部分使用它來處理異常。try語句塊以try關鍵字開頭,并以一個或多個catch字句結束。在try塊中執行的代碼所拋出(throw)的異常,通常會被其中一個catch子句處理。由于他們“處理”異常,catch字句也稱為處理代碼。 3.由標準庫定義的一組異常類,用來在 throw 和相應的 catch 之間傳遞有關的錯誤信息。4.1 throw表達式
系統通過 throw 表達式拋出異常。throw 表達式由關鍵字 throw 以及尾隨的表達式組成,通常以分號結束,這樣它就成為了表達式語句。throw 表達式的類型決定了所拋出異常的類型。 舉一個簡單的例子: S<span style="font-size:18px;">ales_item item1,item2; std::cin>>item1>>item2; if(item1.same_isbn(item2)) {std::cout<<item1+item2<<std::endl;return 0; } else {std::cerr<<"Data must refer to same ISBN"<<std::endl;return -1; //indicate failure }</span>在這個例子中,我們可以利用throw拋出異常來改寫檢測代碼: <span style="font-size:18px;">Sales_item item1,item2; std::cin>>item1>>item2; if(!item1.same_isbn(item2))throw runtime_error("Data must refer to same ISBN"); srd::out<<item1+item2<<std::endl;</span>這段代碼檢查 ISBN 對象是否不相同。如果不同的話,停止程序的執行,并將控制轉移給處理這種錯誤的處理代碼。throw 語句使用了一個表達式。在本例中,該表達式是 runtime_error 類型的對象。runtime_error 類型是標準庫異常類中的一種,在 stdexcept 頭文件中定義。我們通過傳遞 string對象來創建 runtime_error 對象,這樣就可以提供更多關于所出現問題的相關信息。
4.2 Try 塊
try塊的通用語法形式為: try{ ? ? ? program-statements }catch (exception-specifier){ ? ? ? handler-statement }catch (exception-specifier){ ? ? ? handler-statement }//......try 塊以關鍵字 try 開始,后面是用花括號起來的語句序列塊。try 塊后面是一個或多個 catch 子句。每個 catch 子句包括三部分:關鍵字 catch,圓括號內單個類型或者單個對象的聲明——稱為異常說明符, 以及通常用花括號括起來的語句塊。如果選擇了一個 catch 子句來處理異常,則執行相關的塊語句。一旦 catch 子句執行結束, 程序流程立即繼續執行緊隨著最后一個 catch 子句的語句。 try 語句內的 program-statements 形成程序的正常邏輯。這里面可以包含任意 C++ 語句,包括變量聲明。與其他塊語句一樣,try 塊引入局部作用域,在 try 塊中聲明的變量,包括 catch 子句聲明的變量,不能在 try 外面引用。
? ? ?在前面的例子中,使用了 throw 來避免將兩個表示不同書的 Sales_items對象相加。想象一下將 Sales_items 對象相加的那部分程序與負責與用戶交流的那部分是分開的, 則與用戶交互的部分也許會包含下面的用于處理所捕獲異常的代碼:<span style="font-size:18px;">while (cin >> item1 >> item2) { try {// execute code that will add the two Sales_items// if the addition fails, the code throws a runtime_error exception } catch (runtime_error err) {// remind the user that ISBN must match and prompt for another paircout << err.what()<< "\nTry Again? Enter y or n" << endl;char c;cin >> c;if (cin && c == 'n')break; // break out of the while loop } }</span> 關鍵字 try 后面是一個塊語句。這個塊語句調用處理 Sales_item 對象的程序部分。這部分也可能會拋出 runtime_error 類型的異常。上述 try 塊提供單個 catch 子句,用來處理 runtime_error 類型的異常。在執行 try 塊代碼的過程中,如果在 try 塊中的代碼拋出 runtime_error 類型的異常, 則處理這類異常的動作在 catch 后面的塊語句中定義。本例中, catch輸出信息并且詢問用戶是否繼續進行異常處理。如果用戶輸入'n',則結束while;否則繼續循環,讀入兩個新的 Sales_items 對象。
總結
以上是生活随笔為你收集整理的C++Primer:Break、Continue、Goto、Try/异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话数据结构与算法:基础篇
- 下一篇: Transact-SQL数据类型(文本/