前面一些簡單的知識點略過
case關鍵字和它對應的值一起被稱為case標籤。case標籤必須是整形常量表示式,另外要注意的是bool、char、short、列舉型別也算是整形。
switch語句中如果某個case標籤匹配成功,將從該標籤開始往後執行所有case分支。
每個case語句分支後都應該有break語句,以防止不必要的錯誤發生。如果是人為省略了break語句,則應該新增注釋說明意圖。另外每乙個switch語句中都應該有default分支,哪怕其什麼也不做。
在switch語句中,如果在某處乙個帶有初值的變數位於作用域外,而在另乙個case語句分支中該變數位於作用域之內,則從前一處跳轉到後一處的行為是非法的。c++規定,不允許跨過變數的初始化語句直接跳到該變數作用域的另乙個位置。
case
true:
string file_name; //錯誤:控制流繞過了乙個隱式初始化的變數
int val = 0; //錯誤:控制流繞過了乙個顯式初始化的變數
int val; //正確:因為val沒有進行初始化
break;
case
false:
val = next_num();
if(file_name.empty())
break;
一般來說,如果需要為某個case分支語句定義並初始化乙個變數,我們應該將變數定義在乙個語句塊中,從而保證後面的case標籤都在變數作用域外。
case
true
break;
goto語句的作用是從goto語句無條件跳轉到同一函式內的另一條語句。語法形式如下:
goto
label; //label為乙個語句標籤
label是用於標識一條語句的識別符號。帶標籤語句是一種特殊的語句,在它之前有乙個識別符號以及乙個冒號:
end: return; //一條帶標籤語句
和switch語句型別,goto語句也不能將程式的控制權從變數的作用域之外轉移到作用域之內,比如
goto
end;
int ix = 10;
end:
ix = 42; //錯誤,跳過了變數的初始化語句
向後跳過乙個已經執行的定義時合法的,跳到變數定義之前意味著系統將銷毀該變數,然後重新建立它。
begin:
int sz = get_size();
if(sz < 0)
在實際程式設計中應該盡量少使用goto語句,因為這使程式難理解而且不宜修改。
throw表示式用於丟擲異常,try語句塊用於捕獲異常。throw可以丟擲任何型別的物件作為異常。
通常形式如下:
try
catch(err)
如果乙個異常無法被catch捕獲,則程式會呼叫terminate函式終止程式的執行。
標準庫中定義幾種異常型別以供使用。
c primer讀書筆記 第5章 語句
1.switch語句 case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整型常量表示式。int val 42 char ch while cin ch switch的執行流程有可能跨過某些case標籤。如果程式跳轉到了某個特定的case,則switch結構中該case標籤前的部分會...
C Primer第5版讀書筆記(第7章 類)
第7章 類 const成員函式 7.1.4 建構函式 預設建構函式,可以使用 default進行定義。和其他函式一樣,如果 default在類的內部,則預設建構函式是內聯的 如果它在類的外部,則該成員預設情況下不是內聯的 7.2 訪問控制與封裝 class與struct的唯一區別為class的預設訪...
《C Primer》讀書筆記 5
1.switch語句,有時我們可以故意不使用break語句,達到想要的效果。但是遇到這種情況最好要寫一段注釋,說明一下。正常情況下還是要寫break語句的,漏寫會引發很嚴重的後果。2.區域性靜態變數,在函式內部定義乙個static變數,函式終止之後,這個區域性的靜態變數仍然有效。靜態變數如果不初始化...