C++ 語句
switch語句
如果表達(dá)式和某個(gè)case標(biāo)簽成功匹配,則從該標(biāo)簽后的第一條語句開始執(zhí)行,直到到達(dá)了switch語句的結(jié)尾或者遇到一條break語句為止。

因?yàn)槲覀儧]有在case語句后加上break,所以他在匹配'a'之后將直接執(zhí)行b++。

case關(guān)鍵字和它對(duì)應(yīng)的值一起被稱為case標(biāo)簽,且case標(biāo)簽必須為整型常量表達(dá)式。(上述例子中字符將會(huì)轉(zhuǎn)換為ascii碼,從而也被視為整型常量表達(dá)式)

switch內(nèi)部的變量定義
如果某個(gè)case標(biāo)簽匹配成功,將從該標(biāo)簽開始往后順序執(zhí)行所有case分支。這樣一來程序可能會(huì)跨過某些標(biāo)簽,如果程序跳到了某個(gè)特定case,那么之前忽略的代碼中含有變量的定義怎么辦?
答案是如果在某處一個(gè)帶有初值的變量位于作用域之外,在另一處該變量位于作用域之內(nèi),則從前一處跳到后一處是非法行為。
try語句塊和異常處理
異常是指運(yùn)行時(shí)的反常行為,這些行為超出了函數(shù)正常功能的范圍,典型的一場(chǎng)包括失去數(shù)據(jù)庫連接以及遇到意外輸入等。
異常處理機(jī)制為程序中異常檢測(cè)和異常處理的協(xié)作提供支持。
異常處理包括:
throw表達(dá)式,異常檢測(cè)部分使用throw來表示他遇到了無法處理的問題,我們說throw引發(fā)了一場(chǎng)。
try語句塊,異常處理部分使用try語句塊處理異常,try語句塊以關(guān)鍵字try開始,并以一個(gè)或者多個(gè)catch語句結(jié)束,try語句塊中代碼拋出的異常通常會(huì)被某個(gè)catch子句處理,因?yàn)閏atch子句“處理”異常,所以他們也被叫做異常處理代碼
一套異常類,用于在throw表達(dá)式和相關(guān)的catch子句之間傳遞異常的具體信息。
throw表達(dá)式

拋出異常的類型是runtime_error類型,定義在stdexcept頭文件下,我們必須初始化runtime_error對(duì)象,方式為提供一個(gè)字符串或者string對(duì)象。
try語句塊
try語句塊的語法形式是

catch子句包括三個(gè)部分,catch關(guān)鍵字,括號(hào)內(nèi)一個(gè)對(duì)象的聲明(即exception-declaration),以及一個(gè)塊。
注意:try語句塊內(nèi)的變量在塊外無法訪問,即使是catch子句。
處理代碼

結(jié)果

try語句如果拋出了runtime_error的異常,那么就執(zhí)行catch塊內(nèi)的語句。
err.what()是err的類型是runtime_error,what是runtime_error的一個(gè)成員函數(shù),返回值是C風(fēng)格字符串。
注意:編寫異常安全的代碼非常困難!
標(biāo)準(zhǔn)異常
C++標(biāo)準(zhǔn)庫定義了一組類,用于報(bào)告標(biāo)準(zhǔn)庫函數(shù)遇到的問題,他們分別定義在四個(gè)頭文件中。
exception:定義了通用異常類exception,他只報(bào)告異常的發(fā)生,不提供任何信息。
stdexcept:定義了幾種常用的異常類。
new:定義了bad_alloc異常類型,這種類型我們以后會(huì)介紹。
type_info:定義了bad_cast異常類型,同樣我們以后會(huì)講到。

我們只能以默認(rèn)初始化的方式初始化exception,bad_alloc,bad_cast對(duì)象,不允許為這些對(duì)象提供初始值。
其他類型恰好相反,應(yīng)該使用string對(duì)象或者字符串初始化這些對(duì)象,不允許默認(rèn)初始化,創(chuàng)建此類對(duì)象時(shí),必須初始化。