基本內置類型
- 如何選擇類型的幾點建議
- 當明確知曉數值不能為負數時,選用無符號類型
- 使用int進行整數運算。因為short一般表示的范圍比較小,而long一般和int有相同的范圍。如果表示的范圍超過了int就使用long long
- 算術運算時盡量不要使用char和bool,只有在存放字符型數據和布爾值的時候使用。因為char的符號在有的機器上面是有符號,在另外的一些機器上面確實無符號的,很容易出錯。
- 執行浮點數運算時使用double。因為float的精度不夠而且float和double的計算代價相差無幾,甚至有些機器上面double的運算速度比float的速度快。
- 類型轉換
- 當我們賦值給無符號類型一個超過了它表示的范圍時,結果是初始值對無符號類型表示范圍最大值取余后的結果。例如8bit大小的unsigned char,把-1給它,結果是-1%256,所得結果是255.
- 把一個負數轉化成一個無符號類型的時候,類似於直接給一個無符號數賦值為一個負數,結果等於這個負數加上無符號數的模(例如上例)。
- 切勿混用有符號和無符號類型的數據進行運算。
- 字面值常量
含義 |
字符 |
含義 |
字符 |
換行符 |
\n |
回車符 |
\r |
縱向制表符 |
\v |
縱向制表符 |
\t |
反斜線 |
\ |
退格符 |
\b |
問號 |
\? |
進紙符 |
\f |
報警(響鈴符) |
\a |
雙引號 |
\” |
單引號 |
\’ |
退格符 |
\b |
還有一種泛化的轉義序列
含義 |
符號 |
響鈴 |
\7 |
空字符 |
\0 |
換行 |
\12 |
字符M |
\115 |
空格 |
\40 |
字符M |
\x4d |
注意:如果反斜線后面跟着的八進制數字超過3個,只有前3個數字與\構成轉義序列
變量
- 變量定義和聲明
- 建議初始化每個內置類型的變量。這樣防止不初始化后直接使用帶來的危害。
- 聲明和定義的區別:聲明規定了變量的類型和名字,而定義在此基礎之上還申請空間,也可能為變量賦初值。
- 我們可以使用extern int i;的形式,使用在其他文件中定義的變量
- 變量只能被定義一次可以被聲明很多次,變量的定義必須出現在一個文件中,而其他用到該變量的文件必須對其進行聲明,但是不能重復的定義
- 標識符的幾點建議
- C++中標識符由字母,數字和下划線組成,且必須以字母或者下划線開頭
- 標識符能體現實際含義
- 變量名一般用 小寫字母
- 用戶自定義的類名以大寫字母開頭
- 如果標識符由多單詞組成,則單詞中間應該有明顯的標識
復合類型
- C++中有幾種復合類型,其中最主要的是指針和引用
- 引用
- 引用不是對象,它是給已經存在的對象所起的一個別名
- 因為引用不是一個對象,所以不能定義引用的引用
- 引用只能綁定在某個對象身上,即是引用在定義時必須賦初值,而且中間不能改變引用的指向,不能和字面值或者表達式結果綁定在一起
- 指針
- 指針和引用區別:指針是一個對象,允許對指針進行賦值或者拷貝,而且在指針的生命周期內,允許它先后指向幾個不同的對象;指針無需在定義時賦初值。
- 因為引用不是對象,沒有實際地址,所以不能定義指向引用的 指針
- 解引用操作是針對指針而言的,解引用操作適用於那些確定了指向了某個對象的有效指針。
- 建議初始化所有指針
- 面對比較復雜的指針或者引用的聲明的時候,從右往左閱讀有助於理解他的真實含義