面向對象編程OOP的本質是設計並擴展本身的數據類型。編程
內置的C++數據類型分爲兩組:基本類型和符合類型,其中基本類型僅僅包括整數與浮點數。數據結構
1. 要把信息存儲在計算機中,程序必須記錄3個基本屬性:信息存儲在哪,要存什麼值,存儲何種類型的信息編碼
2. C++命名規則:spa
(1) 名稱中只能使用字母、下劃線、數字,且不能以數字開頭,不能使用關鍵字作名稱,區分大小寫。設計
(2) 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給編譯器及其使用的資源使用,以一個下劃線打頭的名稱用做全局標識符。指針
(3) C++對於名稱長度沒有限制,但某些平臺有長度限制。對象
(4) 多個單詞組成組成一個名稱,一般的作法是使用下劃線將單詞隔開,或者從從第二個單詞開始將每一個單詞的首字母大寫。ci
(5) 描述變量類型或內容的前綴:n表示整型,str或sz表示以空字符結束的字符串,b表示布爾值,p表示指針,c表示單個字符。資源
3. 頭文件climits(或limits.h)定義了符號常量來表示類型限制的信息。作用域
符號常量 |
表示 |
CHAR_MIN |
char的最小值 |
SCHAR_MAX |
signed char 最大值 |
SCHAR_MIN |
signed char 最小值 |
UCHAR_MAX |
unsigned char 最大值 |
SHRT_MAX |
short 最大值 |
SHRT_MIN |
short 最小值 |
USHRT_MAX |
unsigned short 最大值 |
INT_MAX |
int 最大值 |
INT_MIN |
int 最小值 |
UINT_MAX |
unsigned int 最大值 |
UINT_MIN |
unsigned int 最小值 |
LONG_MAX |
long最大值 |
LONG_MIN |
long最小值 |
ULONG_MAX |
unsigned long 最大值 |
FLT_MANT_DIG |
float 類型的尾數 |
FLT_DIG |
float 類型的最少有效數字位數 |
FLT_MIN_10_EXP |
帶有所有有效數的float類型的負指數的最小值(以10爲底) |
FLT_MAX_10_EXP |
float類型的正指數的最大值(以10爲底) |
FLT_MIN |
保留所有精度的float類型正數最小值 |
FLT_MAX |
float類型正數最大值 |
4. 對類型名使用sizeof運算符時,應將名稱放在括號中,但對變量名使用該運算符時,括號是可選的。
5. C++11的初始化方式:將大括號用於變量初始化,如int em={3};等號也能夠省略,如int em{3};大括號內能夠不包含任何東西,這將使用默認值,如int em{}和int em{0}等價,這也有助於更好的防範類型轉換錯誤。
6. 整型字面值:
(1) 若是第一位爲1-9,則爲十進制
(2) 若是第一位爲0,第二位爲1-7,則爲八進制
(3) 若是前兩位爲0x或0X,則爲十六進制
cout默認格式爲十進制,如要顯示八進制和十六進制,則需使用cout<<hex和cout<<oct
7. 如何肯定常量的類型:
(1) 除非有理由存儲爲其餘類型,不然存儲爲int類型
(2) 對於十進制不帶後綴的整數,將使用下面幾種類型中可以存儲該數的最小類型來表示:int,long或long long
(3) 對於八進制、十六進制不帶後綴的整數,將使用如下幾種類型中可以存儲該數的最小類型來表示:int,unsigned int,long,unsigned long,long long,unsigned long long
8. C++轉義序列編碼
字符名稱 |
ASCII符號 |
C++代碼 |
十進制ASCII碼 |
十六進制ASCII碼 |
換行符 |
NL(LF) |
\n |
10 |
0xA |
水平製表符 |
HT |
\t |
9 |
0x9 |
垂直製表符 |
VT |
\v |
11 |
0xB |
退格 |
BS |
\b |
8 |
0x8 |
回車 |
CR |
\r |
13 |
0xD |
振鈴 |
BEL |
\a |
7 |
0x7 |
反斜槓 |
\ |
\\ |
92 |
0x5c |
問號 |
? |
\? |
63 |
0x3F |
單引號 |
‘ |
\’ |
39 |
0x27 |
雙引號 |
「 |
\」 |
34 |
0x22 |
在能夠使用數字轉義序列和符號轉義序列時,應使用符號轉義序列(如\0x8或\b),數字表示與特定的編碼方式有關,而符號表示能夠適用於任何編碼方式,可讀性也更強。
9. 通用字符名(universal character name)是表示特殊字符的一種機制,以\u或\U打頭。\u後面是8個十六進制位,\U後面是16個十六進制位。這些位表示的是字符的ISO 10646碼點(字符的編號)。在源代碼中,可以使用適用於全部系統的通用編碼名,而編譯器根據當前系統使用合適的內部編碼來表示它。
10. char是否有符號由C++實現決定。若是說char有某種特定行爲對於開發者來講很是重要,能夠顯式的將類型設置爲signed char和unsigned char
11. wchar_t(寬字符類型)用於表示擴展字符集。它是一種整數類型,這種類型與另外一種整型的長度和符號屬性相同,對於底層類型的選擇取決於實現。wcin和wcout可用於處理wchar_t流。另外,可經過加上前綴L來指示寬字符常量和寬字符字符串。
12. C++11新增char16_t和char32_t,都無符號,前者長16位,使用前綴u表示常量,如u’c’,與\u00F6的通用字符名匹配,後者長32位,使用前綴U表示常量,如U’c’,與\U000022B的通用字符名匹配。它們的底層類型都是一種內置的整型,但底層類型可隨系統變化。
13. 使用const限定符來處理符號常量。若是在聲明常量時沒有提供值,則該常量的值是不肯定的,且沒法修改。可以使用:首字母大寫、整個名稱大寫、以字母k打頭提醒使用者這是一個常量。const與define相較的好處是:類型明確、限定在做用域中、可用於更復雜的數據結構。
14. C++有三種浮點數類型:float,double,long double,其中float至少32位,通常爲32位,double至少48位,通常爲64位,long double 至少和double同樣多,通常爲80,96,128位,這三種類型的指數範圍至少-37到37,可從頭文件cfloat或float.h找到系統的限制。
15. 求模運算的兩個操做數必須是整型,若是其中一個是負數,則結果的符號知足(a/b)*b+a%b=a的運算規則。
16. 當多個運算符應用於同一個操做數時,應用C++優先級決定優先應用哪一個操做符。當兩個運算符優先級相同時,C++將看操做數的結合性。
17. C++11使用{ }進行初始化,即列表初始化,這種方法僅當目標變量可以正確存儲賦值給它的值時才能編譯經過。
18. 在計算表達式時,C++將bool,char,unsigned char,signed char,short類型自動轉換爲int類型,即整型提高。
19. 將不一樣類型進行算術運算時,將較小的類型轉換爲較大的類型。編譯器經過校驗表來肯定在算術表達式中的轉換:
(1) 若是有一個操做數的類型是long double,則另外一個操做數轉換爲long double。
(2) 不然,若是有一個操做數的類型是double,則另外一個操做數轉換爲double。
(3) 不然,若是有一個操做數的類型是float,則另外一個操做數轉換爲float。
(4) 不然,說明操做數都是整型,進行整型提高。在這種狀況下,若是兩個操做數都是無符號或是有符號的,且其中一個操做數的級別比另外一個低,則自動轉換爲級別較高的類型。
若是一個操做數是有符號的,另外一個操做數是無符號的,且無符號操做數的級別比有符號操做數的級別高,則將有符號操做數轉換爲無符號操做數所屬類型。不然,若是有符號類型可表示無符號類型全部取值,則將無符號操做數轉換爲有符號操做數所屬類型。不然,將兩個操做數都轉換爲有符號類型的無符號版本。
20. C++11從新定義了關鍵字auto,使其可以根據初始值的類型判斷變量類型。