# 第五章 述句 筆記 ## 簡單述句 - 運算式述句(expression statement):一個運算式尾端加上分號(semicolon),就是運算式述句(expression statement) - 空述句(null expression):只有一個單獨的分號(semicolon) - 複合述句(compound expression 又稱區塊 block):用大括號(curly braces)包圍起來的述句和宣告的一整個序列。而一個區塊(block)就是一個範疇(scope) ## 條件述句(if statement) - 懸置 else(dangling else):用來指說在巢狀(nested)的 if else 述句中,如果 if 比 else 多如何處理的問題。C++ 使用的方法是 else 與最近沒有配對到 else 的 if 配對,而如果該 else 找不到配對的 if 就是 danling else - 某些 coding styles 建議永遠都在 if 或 else 後使用大括號(同樣適用於 while 與 for 述句) - swtich 中的 case lable 後面接的必須是一個常數運算式(constant expression),因此後面放執行時期中可能換變動的變數會編譯錯誤,且如果有任兩個 case lable 後面接的常數運算式的值相同也會產生編譯錯誤 ## 迭代式述句(iterative statements) - while:當不確定到底要迭代多少次的時候,使用 while 會比較合適,比如讀取輸入的內容 - for:for 述句(statement)的標頭(header)可以省略掉 init-statement,condition 和 expression 的任何一个,甚至是全部 - range for:for (declaration: expression) statement - do while:易忘!\\最後的 condition 後面必須要加上分號 ## 跳躍述句(jump statements) - break:break 述句負責中斷(interrupt)離他最近的 while、do while、for 或者 switch 述句,並且從這些述句之後的第一條述句開始繼續執行 - continue:中斷(interrupt)最接近的外圍迴圈目前的迭代,並且立即開始下一次的迭代。只能用在 while、do while、for 的内部 - goto:讓程式無條件跳躍到相同函式中的另一個述句,而因為會使程式難以理解而且不易修改,程式中應盡少使用 goto 述句 ## try 區塊與例外處理(try-block and exception) 例外(exceptions)是執行時期發生的異常狀況,例如失去資料庫連線,或遭遇非預期的輸入,是在程式正常功能以外的異常。處理異常行為很可能會是設計任何系統時最困難的部分 - throw 運算式:偵測問題的部分(detecting part)中使用 throw 運算式來表示它遇到了無法處理的問題。我們會說一個 throw 提出(raise)一個例外(exception) - try 區塊:以 try 關鍵字(keyword)開始,以一個或多個的 catch 字句结束。try 區塊中執行的程式碼所提出的例外通常會由其中一個 catch 來處理,因為它們負責處理(handle)例外(exception)。而 catch 子句也被稱為例外處理器(exception handler) - exception 類別:用來在一個 throw 和與其關聯的一個 catch 之間傳遞所發生的事情的資訊,這些資訊以類別的形式呈現,並且被定義在四個標頭中: - exception 標頭定義最一般的例外類別,名為 exception。它所傳達的僅是有例外發生,但不提供額外資訊 - stdexcept 標頭定義了數個一般用途的例外類別,列於下表 - new 標頭定義 bad_alloc 例外型別,將在第 12 章涵蓋 - type_info 標頭定義 bad_cast 例外型別,會在第 19 章涵蓋 ### 定義於 \<stdexcept> 的標準例外類別 | 類別名稱 | 意義 | |---|---| | exception | 最一般的問題 | | runtime_error | 只能在執行時期(run time)被偵測到的問題 | | range_error | 執行期錯誤:產生的結果值超出了有意義的範圍 | | overflow_error | 執行期錯誤:計算溢位了(overflowed) | | underflow_error | 執行期錯誤:計算下溢了(underflowed) | | logic_error | 程式邏輯中的錯誤| | domain_error | 邏輯錯誤:所給的引數不存在結果 | | invalid_error | 邏輯錯誤:不適當的引數 | | length_error | 邏輯錯誤:試圖創建一個大於該型別最大大小的物件 | | out_of_error | 邏輯錯誤:用了一個在有效範圍外的值 |
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up