條件語句
- if、if else語句:
- if else語句:注意嵌套的合法性,建議使用花括號進(jìn)行流程控制。
- 懸垂else:else將與離它最近的尚未匹配的if匹配,從而消除二義性。
- switch語句:
- case標(biāo)簽:case關(guān)鍵字與其對應(yīng)的值,必須為整型常量表達(dá)式。
- 任意兩個case標(biāo)簽的值不能相同,否則引發(fā)錯誤。
- 如果某個case標(biāo)簽匹配成功,將從該標(biāo)簽開始往后順序執(zhí)行所有case分支,直至switch語句的結(jié)尾或遇顯式中斷。
- case標(biāo)簽之后不一定需要換行。
- default標(biāo)簽:如果沒有一個case標(biāo)簽可以匹配上switch表達(dá)式的值,程序?qū)?zhí)行default標(biāo)簽。
- switch內(nèi)部的變量定義:如果在某處一個帶有初值的變量位于作用域之外,在另一處該變量位于作用域之內(nèi),則從前一處跳轉(zhuǎn)到后一處的行為是非法行為。(不允許跨過變量的初始化語句直接跳轉(zhuǎn)到該變量作用域內(nèi)的另一個位置)。
- 如果為某一個case分支定義并初始化一個變量,應(yīng)該把變量定義在塊內(nèi),從而確保后面的所有case標(biāo)簽都在變量的作用域之外。
迭代語句
- while語句:
while(condition)
statement
- 傳統(tǒng)for語句
for(initializer; condition; expression) //initializer可以定義多個對象,但只能有一條聲明語句
statement
- 范圍for語句
for(declaration: expression)
//expression表示一個序列(初始化列表、數(shù)組、vector/string等)
//declaration定義一個變量(建議使用auto關(guān)鍵字),若statement中對變量進(jìn)行寫操作,需定義為引用類型
statement
- do-while語句
do
statement
while(condition);
跳轉(zhuǎn)語句
- break語句:終止離它最近的while、do-while、for、switch語句,并從這些語句之后的第一條語句開始執(zhí)行。
- continue語句:終止最近的循環(huán)語句中的當(dāng)前迭代并立即開始下一次迭代。
- goto語句:從goto語句無條件跳轉(zhuǎn)到同一函數(shù)的另一條語句。
- 形式:goto label;
- 帶標(biāo)簽語句:label: expression;
- goto語句與switch語句類似,不能講程序的控制權(quán)從變量的作用域之外移到作用域之內(nèi)。
- 程序中避免使用goto語句,降低程序可讀性。
異常處理語句
- 異常處理包括:
- throw表達(dá)式:異常檢測部分使用throw表達(dá)式表示遇到了無法處理的問題,即throw引發(fā)了異常。
- try語句塊:異常處理部分使用try語句塊處理異常,此語句塊以關(guān)鍵字try開始,一個或多個catch語句結(jié)束,catch語句可以處理異常,被稱為異常處理代碼。
- 異常類:用于在throw表達(dá)式和相關(guān)的catch子句之間傳遞異常的具體信息。
- throw表達(dá)式:包含關(guān)鍵字throw和緊隨其后的一個表達(dá)式,其中表達(dá)式的類型就是拋出的異常類型。
if(item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
//若程序執(zhí)行到了這里,表明兩個ISBN是相同的。
cout << item1 + item2 << endl;
- try語句塊:
try{
program-statements
}catch(expression-declaration){
handler-statements
}catch(expression-declaration){
handler-statements
}//…
- 沒有匹配的catch子句:程序轉(zhuǎn)到名為terminate的標(biāo)準(zhǔn)庫函數(shù),進(jìn)行缺省處理。
- 標(biāo)準(zhǔn)異常:
- exception:定義最常用的異常類,只報告異常的發(fā)生,不提供額外信息。
- stdexcept:定義了幾種常用的異常類,詳細(xì)信息見下。
- new:定義了bad_alloc異常類型。
- type_info:定義bad_cast異常類型。
- exception、bad_alloc、bad_cast:只能默認(rèn)初始化。
- 其他類型:不允許默認(rèn)初始化,應(yīng)使用string類型或C風(fēng)格字符串進(jìn)行初始化。
- 異常類只有一個成員函數(shù)what(),無參數(shù),返回值是指向C風(fēng)格字符串的const char*。
5.stdexcept中定義的異常類:
- exception:最常見的問題。
- runtime_error:只有在運行時才能檢測出的問題。
- range_error:運行時錯誤——產(chǎn)生的結(jié)果超出了有意義的值域范圍。
- overflow_error:運行時錯誤——運算上溢。
- underflow_error:運行時錯誤——運算下溢。
- logic_error:程序邏輯錯誤。
- domain_error:邏輯錯誤——參數(shù)對應(yīng)的結(jié)果值不存在。
- invalid_argument:邏輯錯誤——無效參數(shù)。
- length_error:邏輯錯誤——試圖創(chuàng)建一個超出該類型最大長度的對象。
- out_of_range:邏輯錯誤——使用一個超出有效范圍的值。