第6章:語句

轉載請註明原文出處:http://blog.csdn.net/roddick621

以下的知識點全部都是來自於C++ Primer 第四版,如果需要詳細瞭解的話,可以查看原版的書籍。


1.簡單語句

C++中大多數語句以分號結束。最簡單的語句就是空語句(null statement)。語法就是隻有一個分號(;)。


2.聲明語句

在C++中,對象或類的定義或聲明也是語句。儘管定義語句也許更準確寫,但定義語句經常被稱爲聲明語句。


3.複合語句

複合語句,通常被稱爲塊,是用一堆花括號括起來的語句序列(也可能是空的)。符合語句用在語法規則要求使用單個語句但程序邏輯卻需需要不止一個語句的地方。


4.語句作用域

有些語句允許在他們的控制結構中定義變量。在語句的控制結構中定義的變量,僅在定義他們的塊語句結束前有效。對於在控制語句中定義的變量,限制其作用域的一個好處是,這些變量尅重複使用而不必擔心它們的當前值在每一次使用時是否正確。


5.if語句

if語句根據特定表達式是否爲真來有條件地執行另一個語句。if語句有兩種形式:其中一種帶else分支而另一種則沒有。C++中懸垂else問題帶來的二義性,通過講else匹配給最後出現的尚未匹配的if子句來解決。

//最簡單的if語句
if(confition)
    statement

//if else語句的語法形式
if(condition)
    statement1  //可爲語句塊
else
    statement2

6.switch語句

6.1 使用switch

char ch;
cin >> ch;
switch (ch) {
    case 'a': ...; break;
    case 'b': ...; break;
    case 'c': 
    case 'b': ...; break; //c , d執行相同的操作
...
    default: ...; break;
}


如果表達式與其中一個case標號的值匹配,則程序將從標號後面的第一個語句開始一次執行各個語句,知道switch結束或遇到break語句爲止。如果沒有遇到匹配的case標號(並且沒有default標號),則程序從switch語句後面的第一條語句繼續執行。


6.2 switch中的控制流

爲了避免執行完某個特定標號對應的代碼後繼續執行後續的case標號的內容,程序員必須使用break語句清楚地告訴編譯器停止執行switch中的語句。如果需要兩個或多個case值由相同的動作序列來處理,則把case標號依次排列,中間可以不添加break。


6.3 default標號

default標號提供了相當於else子句的功能。如果所有的case標號與swit表達式的值都不匹配,並且default標號存在,則執行default標號後面的語句。一個標號不能獨立存在,它必須在語句之前。如果switch結構以default標號結束,而且default分支不需要完成任何任務,那麼該標號後面必須有一個空語句。


6.4 switch 表達式與case 標號

switch求解的表達式可以非常複雜,該表達式可以定義和初始化一個變量。case標號必須是整型常量表達式。


6.5 switch 內部的變量定義

對於switch結構,只能夠在它的最後一個case標號或default標號後面定義變量。制定這個規則是爲了避免出現代碼跳過變量的定義和初始化的情況。


7.while語句

當條件爲真時,while語句反覆執行目標語句。他的語法形式如下:

while (condition)
    statement

8.for循環語句

for語句的語法形式是:

//init-statement:必須是聲明語句、表達式語句或空語句。這些語句都以分號結束
for(init-statement condition;expression)
    statement
或者:
for(initializer; condition; expression)
    statement

8.1 省略for語句頭的某些部分

for語句頭中,可以省略init-statement(初始化語句)、condition(循環語句)或者expression(表達式)中的任何一個(或全部)。


8.2 for語句頭中的多個定義。

可以在for語句的init-statement中定義多個對象;但是不管怎麼樣,該處只能夠出現一個語句,因此所有的對象必須具有相同的一般類型。


9.do while語句。

語法格式如下:

do
     statement
while(condition); //與while不同,do while語句總是以分號結束。

10.break語句

break語句用於結束最近的while, do while, for 或 switch語句,並將程序的執行權傳遞給緊接在被終止語句之後的語句。


11.continue語句

continue語句導致最近的循環語句的當次迭代提前結束。對於while和do while語句,繼續求解循環條件,而對於for循環,程序流程接着求解for語句頭中的expression表達式。


12.goto語句

goto語句提供了函數內部的無條件跳轉,實現了從goto語句跳轉到同意函數內某個帶標號的語句。goto語句的語法規則如下:

goto lable; //lable是用於標識帶標號的語句的標識符。

在任何語句前提供一個標識符和冒號,即得帶標號的語句


13.try塊和異常處理

C++的異常處理包括:

throw 表達式:錯誤檢測部分使用這種表達式來說明遇到了不可處理的錯誤。可以說,throw引發了異常條件。

try塊:錯誤處理部分使用它來處理異常。try語句塊以try關鍵字開始,並以一個或多個catch子句結束。在try塊中執行的代碼拋出的異常,通常都會被其中一個catch子句處理。由於他們“處理”異常,catch子句也稱爲處理代碼。

由標準庫定義的一組異常類,用來在throw和相應的catch之間傳遞有關的錯誤信息。


13.1 throw表達式

系統通過throw表達式拋出異常。throw表達式由關鍵字throw以及尾隨的表達式組成。通常以分號結束,這樣它就成爲了表達式語句。throw表達式的類型決定了所拋出異常的類型。


13.2 try塊

try塊的通用語法形式是:

try {
    program-statements
} catch (exception-specifier) {
    handler-statements
} catch (exception-specifier) {
    handler-statements
} //...

try塊以關鍵字try開始,後面是用花括號括起來的語句序列快。try塊後面是一個或多個catch子句。每個catch子句包括三部分:關鍵字catch,圓括號內單個類型或者單個對象的聲明----稱爲異常說明符,以及通常用花括號括起來的語句塊。如果選擇了一個catch字符來處理異常,則執行相關的塊語句。一旦catch子句執行結束,程序流程立即繼續執行緊隨的最後一個catch子句的語句。


13.3 標準異常

C++標準庫定義了一組類,用於報告在標準庫中的函數遇到的問題。標準庫異常定義在四個頭文件中:

(1)exception頭文件定義了最常見的異常類,它的類名是exception。這個類只通知異常的產生,但不會提供更多的信息。

(2)stdexcept頭文件定義了集中常見的異常類。

(3)new頭文件定義了bad_alloc異常類型,提供了無法分配內存而由new拋出的異常。

(4)type_info頭文件定義了bad_cast異常類型。


14.使用預處理器進行調試

可以在代碼中使用NDEBUG預處理變量實現有條件的調試代碼:

int main() 
{
#ifndef NDEBUG
cerr << "string main" <<endl;
#endif
//...

默認的情況下,NDEBUG未定義,這就意味着不會執行#ifndef和#endif之間的代碼。如果需要,可以在編譯的之後把參數-DNDEBUG傳給編譯器,這樣的命令等效於在main.c的開頭提供#define NDEBUG預處理命令。

預處理器還定義了其餘四種在調試時非常有用的常量:

__FILE__  文件名

__LINE__ 當前行

__TIME__  文件被編譯的時間

__DATE__  文件被表意的日期













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章