【修煉C++】基礎知識點筆記-第4,5章 表示式&&語句
1、條件運算子滿足右結合律,意味著運算物件(一般)按照從右向左的順序組合。
//靠右邊的條件運算(比較成績是否小於60)構成了靠左邊的條件運算的:分支。
finalgrade = (grade > 90)?"high pass":(grade < 60) ? "fail":"pass";
2、位運算子,作用於整數型別的運算物件,並把運算物件看成二進位制的集合。如果運算物件是一個"小整型",則它的值會被自動提升成較大的整數型別。
3、sizeof運算子
返回一條表示式或一個型別名字所佔的位元組數。sizeof運算子滿足右結合律,其所得的值是一個size_t型別的常量表達式。
//運算子的運算物件有兩種形式 sizeof(type); sizeof expr ;
sizeof並不實際計算其運算物件的值。因此即使sizeof *p中的p是個無效指標,也仍然是一種安全行為。
4、while語句(不確定到底要迭代多少次時使用)
while的條件部分可以是一個表示式或者是一個帶初始化的變數宣告;
while(condition)
statement
while(int i = get_num()) //每次迭代時建立並初始化i
cout<<i<<endl;
5、do-while語句
do-while語句先執行語句或者塊,後判斷條件,所以不允許在條件部分定義變數(像在while-do語句中一樣),因為先後關係。
do{
//...
mumble(foo);
}while(int foo = get_foo);//錯誤:將變數宣告放在了do的條件部分
6,break&&continue語句
break語句負責終止離其最近的while,do while,for或switch語句。只能出現在迭代語句或者switch語句內部。break語句的作用範圍僅限於最近的迴圈或者switch。
continue語句智慧出現在for,while,do while迴圈的內部,或者巢狀在此迴圈裡的語句或者塊的內部。和break語句不同的是,只有當switch語句巢狀在迭代語句內部時,才能在switch裡使用continue。
7,goto語句
goto語句和控制權轉向的那條帶標籤的語句必須位於同一個函式內。和switch語句類似,goto語句也不能將程式的控制權從變數的作用域之外轉移到作用域之內:
//..
goto end;
int ix = 10//錯誤:goto語句繞過了一個帶初始化的變數定義
end:
//錯誤:此處的程式碼需要使用ix,但是goto語句繞過了它的宣告
ix = 42;
8,try語句塊和異常處理
異常處理機制為程式中異常檢測和異常處理這兩部分的協作提供支援。在c++語言中,異常處理包括
throw表示式,異常檢測部分使用throw表示式來表示它遇到了無法處理的問題。throw引發了異常。
try語句塊,以關鍵詞try開始,並以一個或多個catch子句結束。catch子句處理異常,異常處理程式碼。
一套異常類,用於在throw表示式和相關的catch子句之間傳遞異常的具體資訊。
try{
program-statements
}
catch(exception-declaration)
{
handle-statements
}
catch(exception-declaration)
{
handle-statements
}
9,標準異常
c++標準庫定義了一組類,用於報告標準庫函式遇到的問題。他們分別定義在4個頭檔案中。
1 exception標頭檔案定義了最通用的異常類exception。它只報告異常的發生,不提供額外資訊。
2 stdexcept
3 new標頭檔案定義了bad_alloc異常型別。
4 type_info標頭檔案定義了bad_cast異常類。
只可以以預設方式初始化exception, bad_alloc, bad_cast物件,不允許為這些物件提供初始值。
其他異常型別必須使用string物件或者C風格字串初始化這些類的物件,不允許預設初始化。
異常型別只定義了一個名為what的成員函式,該函式沒有任何引數,返回值是一個指向C風格字串的const char*。該字串的目的是提供關於異常的一些文字資訊。