C++ 學習筆記之(5)-語句和異常
C++ 提供了一組控制流語句以支持更復雜的執行路徑
條件語句
C++語言提供了兩種條件語句,if
語句和switch
語句
- 懸垂else:else與離它最近的尚未匹配的if匹配
- case 標籤必須是整型常量表達式
- switch內部的變量定義:如果要在某個case分支定義並初始化一個變量,應該把變量定義在塊內,確保後面的所有case標籤都在變量的作用域之外。
迭代語句
C++11新標準引入了範圍for
語句,可以遍歷容器或其他序列的所有元素,其語法形式爲
for(declaration: expression)
statement
expression
表示的是一個序列,即擁有能返回迭代器的begin
和end
成員
- 花括號括起來的初始值列表
- 數組
vector
或string
等類型
for(int a : {1, 2, 3}) // 初始化列表
cout << a << endl;
try語句塊和異常處理
異常處理機制爲程序中異常檢測和異常處理提供支持,C++中異常處理包括
throw表達式(throw expression)
:異常檢測部分使用throw
表達式來引發異常try語句塊(try block)
:異常處理部分使用try
語句塊處理異常,try
拋出異常,catch
捕獲異常一套異常類
:用於在throw
表達式和相關的catch
字句之間傳遞異常的具體信息
throw 表達式
拋出異常
throw runtime_error("This is the first runtime_error");
try 語句塊
try{
// 處理代碼,失敗就會拋出 runtime_error 異常
throw runtime_error("This is the second runtime_error");
}catch(runtime_error err){
cout << err.what(); // 捕獲異常,輸出異常信息 "This is the second runtime_error"
}
try
語句塊拋出異常後,程序沿着程序的執行路徑逐層回退尋找適當類型的catch
子句處理異常,若最終還是沒能找到,則轉到名爲terminate
的標準庫函數,非正常退出。
標準異常
C++標準庫定義的異常類如下
exception
頭文件:定義了最通用的異常類exception
, 只報告異常的發生,不提供任何額外信息stdexcept
頭文件:定義了幾種常用的異常類new
頭文件:定義了bad_alloc
異常類型type_info
頭文件:定義了bad_cast
異常類型
exception
、bad_alloc
和bad_cast
對象只能執行默認初始化,不能爲其提供初始值- 除了以上,其他異常類型不允許默認初始化,應該使用
string
對象或者C風格字符串初始化異常對象 - 異常類型只定義了
what
成員函數,沒有參數,返回值爲const char *
, 若異常類型有字符串初始值,則返回該字符串,若無初始值,則返回內容由編譯器決定