C++ 學習筆記之(5)-語句和異常

C++ 學習筆記之(5)-語句和異常

C++ 提供了一組控制流語句以支持更復雜的執行路徑

條件語句

C++語言提供了兩種條件語句,if語句和switch語句

  • 懸垂else:else與離它最近的尚未匹配的if匹配
  • case 標籤必須是整型常量表達式
  • switch內部的變量定義:如果要在某個case分支定義並初始化一個變量,應該把變量定義在塊內,確保後面的所有case標籤都在變量的作用域之外。

迭代語句

C++11新標準引入了範圍for語句,可以遍歷容器或其他序列的所有元素,其語法形式爲

for(declaration: expression)
    statement

expression表示的是一個序列,即擁有能返回迭代器的beginend成員

  • 花括號括起來的初始值列表
  • 數組
  • vectorstring等類型
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_class_defined_in_stdexcept

  • exceptionbad_allocbad_cast對象只能執行默認初始化,不能爲其提供初始值

  • 除了以上,其他異常類型不允許默認初始化,應該使用string對象或者C風格字符串初始化異常對象
  • 異常類型只定義了what成員函數,沒有參數,返回值爲const char *, 若異常類型有字符串初始值,則返回該字符串,若無初始值,則返回內容由編譯器決定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章