-
一個表達式末尾加上分號就變成了表達式語句。最簡單的語句是空語句(一個單獨的分號):語法上需要一條語句但是邏輯上不需要
-
復合語句是指用花括號括起來的(可能為空)語句和聲明的序列:用在語法上需要一條語句,但是邏輯上需要多條語句的地方
-
C++規定在同一個語句塊中
else
與離他最近的if
匹配 -
case
標簽必須是整形常量表達式,如果某個case
標簽匹配成功,將從該標簽開始往后順序執行所有的case
分支,除非程序顯式中斷,標簽不應該孤零零地出現,它后面必須跟一條語句或者另外一個case
標簽 -
C++規定:不允許跨過變量的初始化語句直接跳轉到該變量作用域內的另一個位置。這就要求我們在
case
語句中不能對變量進行初始化操作(可以進行定義,定義是在編譯時期發生的,所以無論如何都無法跳過,但是初始化是可以跳過的,但是這種操作是不被允許的)。case true:string file_name; //錯誤:控制流繞過一個隱式初始化的變量int i = 0; //錯誤:控制流繞過一個顯式初始化的變量int j; //正確:沒有初始化break; case false:j = 1; //正確:j已經定義,這里是賦值break;
如果我們想要在
case
語句中定義并初始化一個變量,應該把變量定義在塊內,從而確保后面所有的case
標簽都在變量的作用域之外case true:{string file_name; //正確:隱式初始化//...}break; case false:{//...}
-
條件部分可以是一個表達式或者是一個帶初始化的變量聲明
-
定義在
while
條件部分或者while
循環體內的變量每次迭代都經歷從創建到銷毀的過程 -
使用
while
:- 不確定要迭代多少次
- 想在循環結束后訪問循環控制變量
-
傳統
for (initializer; condition; expression) statement
循環執行流程:initializer->condition->statement->expression->condition->statement->expression...
initializer
中可以定義多個變量,但只能有一個聲明語句
-
范圍
for
語句:for (declaration : expression)statement
expression
必須是一個序列,比如:用花括號括起來的初始值列表、數組、vector
或string
,共同特點是有可以返回迭代其的begin
和end
成員- 不能通過范圍
for
循環增加vector
對象的元素
- 不能通過范圍
-
do statement while (condition)
語句應該在括號包圍起來的條件后用一個分號表示語句結束condition
使用的變量必須定義在循環體之外
-
goto
語句的作用:從goto
語句無條件跳轉到同一函數內的另一條語句,語法形式為:goto label;
label
用于標識一條語句的標示符label: statement;
標簽標示符獨立于變量或其他標示符的名字,因此標簽標示符可以和程序中其他實體的標示符使用同一個名字而不會相互干擾。
同
switch
語句類似,goto
語句也不能將程序從控制權從變量的作用域之外轉移到作用域之內。向后跳過一個已經執行的定義是合法的(跳到變量定義之前意味著系統將銷毀該變量然后重新創建)。感覺比較復雜也沒有關系,反正不用 -
C++異常處理機制為程序中異常檢測和異常處理兩部分
-
throw
表達式表示遇到了無法處理的問題,我們說throw
引發了異常。例如:throw runtime_error("Data error");
該異常的類型是
runtime_error
對象,拋出異常將終止當前的函數,并把控制權轉移給能處理該異常的代碼類型
runtime_error
是標準庫異常類型中的一種,定義在stdexcept
頭文件中 -
try
語句塊的通用語法形式:try {statement } catch (exception-delaration) {handler-statement } ...
try
語句塊內部聲明的變量在塊外無法訪問,特別是在catch
子句內也無法訪問**如果最終還是沒能找到任何匹配的
catch
子句,程序轉到名為terminate
的標準庫函數。**該函數的行為與系統有關,一般情況下執行該函數將導致程序非正常退出。while (cin >> item1 >> item2) {try {//} catch (runtime_error err) {cout << err.what() << endl;} }
-
-
編寫異常安全的代碼非常困難
exception
頭文件定義了最通用的異常類exception
,只報告異常的發生,只能以默認初始化的方式初始化stdexcept
頭文件定義了幾種常用的異常類(詳見P176表5.1),必須提供string
對象或者C
風格字符串初始化這些類型的對象new
頭文件定義了bad_alloc
異常類型,只能以默認初始化的方式初始化type_info
頭文件定義了bad_cast
異常類型,只能以默認初始化的方式初始化- 異常類型的
what
函數返回一個C風格字符串