第四章-----表示式
1.c++ 語言提供了兩種類似於 vector 和迭代器型別的低階復合型別——陣列和指標。與 vector 型別相似,陣列也可以儲存某種型別
的一組物件;而它們
的區別在於,陣列: 長度是固定的。陣列一經建立,就不允許新增新的元素。不允許陣列直接複製和賦值,陣列
的長度是固定的。
2.指標: 可以像迭代器一樣用於遍歷和檢查陣列中的元素。現代 c++ 程式應盡量使用 vector 和迭代器型別,而避免使用低階的陣列和指標。
3.void* 指標
c++ 提供了一種特殊的指標型別 void*,它可以儲存任何型別物件的位址。
4.當乙個物件被用作右值的時候,用的是物件的值(內容),當物件被用作左值的時候,用的是物件的身份-在記憶體中的位置。左值既可以在等號左邊,也可以在等號右邊。右值只能在右邊。
5.在表示式求值過程中,編譯器的**轉換運算物件常常由一種型別轉換成另一種型別。小整數型別(如bool、char、short等)通常會被提公升成較大的整
數型別,主要是int。const 不能轉成非const.,反方向可以。除非使用const_cast顯示轉換 。。
參與取餘運算物件必須是整數型別。
6. c++11新標準規定整數相除的商一律向0取整(即直接切除小數部分)。邏輯與(&&)和邏輯或(||)滿足短路求值的策略。
7.顯示型別轉換:
static_cast:任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast。
const_cast:只有const_cast且它僅僅只能改變運算物件的底層const。對於將常量物件轉換成非常量物件的行為,我們一般稱為「去掉cosnt性質。就可以執行寫操作,如果物件本身(一般是指標指向的物件)是非常量,寫是合法的,但如果物件是乙個常量,使用const_cast執行寫操作就是未定義。
dynamic_cast:用於將基類的指標或引用安全的轉換成派生類的指標或引用。
reinterpret_cast:reinterpret_cast 通常為運算物件的位模式提供較低層次上的重新解釋。非常危險
注意:強烈建議程式設計師避免使用強制型別轉換。
c primer第四章 表示式
左值 右值 當乙個物件被當做右值的時候使用的是物件的值 內容 當物件被用作左值的時候用的是物件的身份 記憶體 原則 在使用右值的地方可以用左值代替,但是不能把右值當成左值 也就是位置 使用。當乙個左值被用工作右值時,實際上使用的是她的內容 值 1.賦值運算需要乙個左值作為左側運算物件,得到結果仍然是...
C Primer 第四章 表示式
表示式由乙個或多個運算物件組成,對表示式求值將得到乙個結果。字面值和變數時最簡單的表示式,其結果就是字面值和變數的值。把乙個運算子和乙個或多個運算物件結合起來可以生成複雜的表示式。4.1.1 基本概念 4.1.2 優先順序與結合律 4.1.3 求值順序 這部分需要參考加減乘除等運算的先後順序,在此不...
C Primer小記 第四章 表示式
左值和右值 簡單歸納 當乙個物件被用作右值的時候,用的是物件的值 內容 當物件被用作左值的時候,用的是物件的身份 在記憶體中的位置 不是很理解,日後補上 取餘運算 21 8 5 21 5 1窄化轉換 可以使用花括號來對物件初始化。但是要注意,對於內建型別,如果用花括號初始化,如果存在丟失資料的風險,...