《C Primer》第五章 語句

2021-10-10 14:20:31 字數 2824 閱讀 4150

身為c++的零基礎初學者,短期內把《c++primer》啃下來是乙個比較笨但是有效的方法,一方面可以掌握比較規範的c++語法(避免被專案中亂七八糟的風格帶跑偏),另一方面又可以全面地了解c++語法以及c++11新標準(後續要做的事情就剩下查漏補缺,不斷完善自己的知識體系)。

個人感覺從零學習一門新知識比較好的方法是快速了解知識的全貌,然後構建自己的知識地圖,後續不斷地補充相應的細節。

由於《c++primer》和大多數的教科書一樣廢話連篇,因此想要精煉一下每篇文章的內容再列印成pdf,方便溫故知新。

如果在程式的某個地方,語法上需要一條語句但是邏輯上不需要,此時應該使用空語句。一種常見的情況是,當迴圈的全部工作在條件部分就可以完成時,我們通常會使用到空語句。例如我們想讀取輸入流的內容直到遇到乙個特定的值位置,除此之外什麼事情都不做:

// 重複讀入資料直至達到檔案末尾或者某次輸入的值等於sought

while (cin >> s && s != sought)

; // 空語句

if或者while條件後面跟了乙個額外的空語句可能表示迴圈體是空的,可能引發錯誤。

可以在ifswitchwhilefor語句的控制結構內定義變數。定義在控制結構中的變數只在相應語句的內部內可見,一旦語句結束,變數也就超出其作用範圍了。

如果其他**也需要控制訪問變數,則變數必須定義在語句的外部。

1. if語句

2. switch語句1. while語句

while (condition)

statement

2. 傳統的for語句
for (init-statement; contidition; expression)

statement

3. 範圍for語句

c++11新標準引入了一種更加簡單的for語句,用於遍歷容器或者其他序列的所有元素:

for (declaration : expression)

statement

do while語句和while語句基本一致,唯一的區別在於不管條件的值如何,do while都會至少執行一次迴圈:

do

statement

while (condition);

1. break語句

break語句只能出現在迭代語句或者switch語句內部,負責終止離它最近的whiledo whileforswitch語句。

2. continue語句

continue終止最近的迴圈中的當前迭代並立即開始下一次迭代。

3. goto語句

goto語句的作用是從goto語句無條件跳轉到同一函式內的另一條語句,不推薦在程式中使用goto語句,因為它使得程式又難理解又難修改

異常處理機制為程式中異常檢測和異常處理這兩部分的協作提供支援,在c++語言中異常處理包括:

1. throw表示式

舉個例子,下面的程式把兩個sales_item物件相加,檢查讀入的記錄是否是關於同一種書籍的,如果不是就輸出一條資訊然後退出:

// 檢查兩條資料是不是關於同一種書籍的

if (item1.isbn() != item2.isbn())

throw runtime_error("data must refer to same isbn");

cout << item1 + item2 << endl;

上述例子丟擲了乙個runtime_error的物件,該異常會終止當前函式,並將控制權交給能處理該異常的**

2. try語句塊
try  catch (exception-declaration)  catch (exception-declaration)
3. 標準異常

定義的異常類:

exception             最常見的問題

runtime_error 只有在執行時才能檢測出來的問題

range_error 執行時錯誤:生成的結果超出了有意義的值域範圍

overflow_error 執行時錯誤:計算上溢

underflow_error 執行時錯誤:計算下溢

logic_error 程式邏輯錯誤

domain_error 邏輯錯誤:引數對應的結果值不存在

invalid_argument 邏輯錯誤:無效引數

length_error 邏輯錯誤:試圖建立乙個超出該型別最大長度的物件

out_of_range 邏輯錯誤:使用乙個超出有效範圍的值

C Primer 第五章 語句

懸垂else else與離他最近的尚未匹配的if匹配,從而消除程式的二義性 switch表示式的值轉換為整數型別,case標籤的值必須是整型常量表示式 兩個case標籤的值不能相同 以乙個空的default標籤結束的,後面要跟空句或空塊 禁止跨過變數的初始化語句跳轉到該變數作用域的另乙個位置 可以把...

《C Primer》學習筆記 第五章語句

1.在c中物件的定義並不被視為c語言的語句,塊中的所有物件定義必須出現在任何程式語句之前 由於物件的定義是c 語言的一條語句,所以可以將物件定義放在任何其他語句能夠出現的地方。2.在condition 中定義的物件只在與if 相關的語句或語句塊中可見。3.c和c 中關鍵字case後面的值必須是一種整...

C Primer練習筆記 第五章 語句

更多資訊在個人部落格檢視 if grade 10 3 if grade 10 7 lettergrade else lettergrade 上述 雖然是希望else和外層的if匹配,但是c 規定else和離她最近的尚未匹配的if匹配,所以 實際執行過程如下 if grade 10 3 if grad...