C++Primer学习笔记:第5章 语句
-
一個表達式末尾加上分號就變成了表達式語句。最簡單的語句是空語句(一個單獨的分號):語法上需要一條語句但是邏輯上不需要
-
復合語句是指用花括號括起來的(可能為空)語句和聲明的序列:用在語法上需要一條語句,但是邏輯上需要多條語句的地方
-
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)statementexpression必須是一個序列,比如:用花括號括起來的初始值列表、數組、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風格字符串
總結
以上是生活随笔為你收集整理的C++Primer学习笔记:第5章 语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育基地儿童没带户口本能不能进
- 下一篇: LOL求现在版本的龙女打野和上单的符文天