《C Primer》讀書筆記 第5章 語句

2021-08-02 12:52:03 字數 1611 閱讀 9197

前面一些簡單的知識點略過

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變數,函式終止之後,這個區域性的靜態變數仍然有效。靜態變數如果不初始化...