通常情況下,語句是順序執行的。但是,除了最簡單的程式外,只有順序執行往往並不足夠。為此,c++定義了一組控制流語句,允許有條件地執行或者重複地執行某部分功能。
1.1 簡單語句
c++中,大多數語句以分號結束。
表示式語句用於計算表示式。
1.2 宣告語句
在c++中,物件或類的定義或宣告也是語句。
1.3 復合語句
復合語句,通常被稱為塊,使用一對花括號括起來的語句序列。塊標識了乙個作用域,在塊中引入的名字只能在該塊內部或者巢狀在塊中的子塊裡訪問。通常,乙個名字只從其定義處到該塊結尾這段範圍內可見。
復合語句用在語法規則要求使用單個語句但程式邏輯卻需要不止乙個語句的地方。
1.5 語句作用域
在條件表示式中定義的變數必須初始化,該條件檢驗的就是初始化物件的值。
對於在控制語句中定義的變數,限制其作用域的乙個好處是,這些變數名可以重複使用而不必擔心它們的當前值在每一次使用時是否正確。對於作用域外的變數,是不可能用到其在作用域內的殘留值的。
1.6 if 語句
if語句根據特定表示式是否為真來有條件的執行另乙個語句。
1.7 switch 語句
深層巢狀的if-else語句往往在語法上是正確的,但邏輯上卻沒有正確地反映程式設計師的意圖。
1.7.1 switch 中的控制流
1.7.2 switch表示式與case標號
case標號必須是整型常量表示式。
如果兩個case標號具有相同的值,同樣也會導致編譯時錯誤。
1.7.3 switch 內部的變數定義
對於switch結構,只能在它的最後乙個case標號或default標號後面定義變數。
制定這個規則是為了避免出現**跳過變數的定義和初始化的情況。
在這種情況下,如果需要為某個特殊的case定義變數,則可以引入塊語句,在該塊語句中定義變數,從而保證這個變數在使用前被定義和初始化。
1.8 while 語句
當條件為真時,while語句反覆執行目標語句。
1.9 for迴圈語句
一般來說,用於對每次迴圈過程中都要修改的變數進行初始化,或者賦給乙個起始值。
for迴圈的使用
假如有下面的for迴圈,用於輸出vector物件的內容:
for(vector::size_type ind =0; ind != svec.size(); ++ind)
cout << svec[ind];
if(ind + 1 != svec.size())
cout << " ";
它的計算順序如下:
(1)迴圈開始時,執行一次init-statement(初始化語句)。在這個例子中,定義了ind,並將它初始化為0;
(2)接著,求解condition(迴圈條件)。如果ind不等於svec.size(),則執行for迴圈體,否則迴圈結束。如果第一次迴圈時,條件就為false,則不執行for迴圈體。
(3)如果條件為true,則執行for迴圈體。
(4)最後,求解exprission。
1.8.1 省略for語句頭的某些部分
for與語句中,可以省略init-statement(初始化語句)、condition(迴圈條件)或者expression(表示式)中的任何乙個(或全部)。
1.8.2 for語句頭中的多個定義
可以在for語句的init-statement中定義多個物件;但不管怎樣,該處只能出現乙個語句,因此所有的物件必須具有相同的一般型別。
1.8.3 try塊和異常處理
異常機制提供程式中錯誤檢測與錯誤處理部分之間的通訊。c++的異常處理中的包括:
1、throw 表示式,錯誤檢測部分使用這種表示式來說明遇到了不可處理的錯誤。可以說,throw引發了異常條件。
2、try,錯誤處理部分使用它來處理異常。try語句塊以try關鍵字開始,並以乙個或多個catch子句結束。在try塊中執行的**所丟擲的異常,通常會被其中乙個catch子句處理。由於它們「處理」異常,catch子句也稱為處理**。
3、由標準庫定義的一組異常類,用來在throw和相應的catch之間傳遞有關的錯誤資訊。
1.8.3.1 throw表示式
系統通過throw表示式丟擲異常。throw表示式由關鍵字throw以及尾隨的表示式組成,通常以分號結束,這樣它就成了表示式語句。throw表示式的型別決定了所丟擲異常的型別。
1.8.3.2 try塊
try塊的通用語法形式是:
tryprogram-statements
}catch(exception-specifier)
handler-statments
catch(exception-specifier)
handler-statments
try塊以關鍵字try開始,後面是用花括號括起來的語句序列塊。try塊後面是乙個或多個catch子句。每個catch子句包括三個部分:關鍵字catch,圓括號內單個型別或者單個物件的宣告——稱為異常說明符,以及通常用花括號括起來的語句塊。如果選擇了乙個catch子句來處理異常,則執行相關的塊語句。一旦catch子句執行結束,程式流程立即繼續執行緊隨著最後乙個catch子句的語句。
C primer(第四版)讀書筆記2
以下幾種情況都可能引發執行時或編譯時錯誤 1 delete不是new分配的空間 2 重複delete new分配的空間兩次以上 3 在釋放動態陣列時忘了方括號對 inti int pi i delete pi vs 2008 會執行時錯誤 string str dwarves delete str ...
C primer(第四版)讀書筆記5
extern int i declares but does not define i int i declares and defines i extern宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。如果宣告有初始化式,那麼它...
C Primer中文版第四版 讀書筆記
2011.8.10 p46 只有當extern 宣告位於函式外部時,才可以含有初始化式。extern double pi 3.1416 pi 是乙個全域性變數,這是乙個定義 p50 在全域性作用域宣告的const 變數是定義該物件的檔案的區域性變數 僅作用在該檔案中 要使 const 變數能夠在其他...