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