《C++PrimerPlus 6th Edition》第3章 處理數據 要點記錄

1. 簡單數據類型

類型 具體類型 說明
整型 bool
char、signed char、unsigned char
(至少16位) short、unsigned short
(至少與short一樣長)int、unsigned int
(至少32位,且至少與int一樣長) long 、unsigned long
(C++11特性) long long、unsigned long long
wchar_t、char16_t(無符號16位)、char32_t(無符號32位)
①C++沒有提供自動防止超出整型限制的功能,可以使用頭文件climits來確定限制情況,例如INT_MAX(int最大值),CHAR_BIT(字符)
② 使用sizeof時要加括號(對於變量名可無括號)
③wchar_t、char16_t、char32_t有底層類型,其選擇取決於實現。
實型 float、double、long double ①float至少32位
②double至少48位且不少於float
③long double至少和double一樣多
④float至少確保6個有效數位,double13個
⑤關於浮點數的限制可在頭文件cfloat中找到

2. C++命名規則

  1. 名稱中只能使用字母字符、數字和下劃線(_)
  2. 名稱的第一個不能爲數字
  3. 區分大小寫
  4. 不能選擇C++關鍵字作名稱
  5. C++名稱長度無限制,但有些平臺有長度限制
  6. 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現(編譯器及其使用的資源)使用,以一個下劃線開頭的名稱被保留給實現,用作全局標識符 (使用如__fools或_time_stop或_Donut這樣的名稱,編譯不會出問題,但是會導致行爲的不穩定)

3. 初始化方式

  • C-Style:int x = 4396;
  • C++ Style:int x(7777);
  • C++11:int x = {2333}; or int x{2333}; or int x={};//0 or int x{}; //0

4. 類型轉換

自動轉換

  1. 整型提升:計算表達式時,C++將bool、char、unsigned char、signed char、short值轉換爲int
  2. C++11算術表達式中用到的校驗表:
    • 如果有一個操作數的類型爲long double,則將另一個操作數轉換爲long double
    • 否則,如果有一個爲double,另一個轉爲double
    • 否則,有一個爲float,則另一個轉爲float
    • 否則,操作數都爲整型,因此執行整型提升
    • 在這種情況下,如果兩操作數都是有符號的或都是無符號的,且其中一個操作數的級別比另一個低,則轉換爲高級別類型(高級別範圍更大)
    • 如果一個操作數有符號,另一個無符號,且無符號操作數的級別比有符號的高,則將有符號操作數轉爲無符號操作數所屬類型
    • 否則,如果有符號類型可表示無符號類型的所有可能取值,則將無符號操作數轉換爲有符號操作數所屬類型
    • 否則,將兩個操作數都轉換爲有符號操作數其類型對應的無符號版本

強制轉換

C-Style:(typename) value;
C++ Style:typename(value); or static_cast<typename>(value);etc.

5. 其餘一些注意點

  1. 如果知道變量可能表示的整數值大於16位整數的最大可能值,則使用long。即使系統上int爲32位也應這樣做。這樣,將程序移植到16位系統時,就不會突然無法正常工作(因爲此時的int變量存儲的值如果超過32767=2^16-1,那麼就會上溢)
  2. 如果要存儲的值超過20億(2×1092 \times 10^{9}),可使用long long
  3. 通常僅當有大型整型數組時,纔有必要使用short
  4. 如果節省內存很重要,則應使用short而非int,即使它們的長度是一樣的。例如,如果將程序從int爲16位的系統移到32位的系統時,則用於存儲int數組的內存量將加倍,但short數組不受影響
  5. 控制符 cout<<std::hex; cout<<std::oct; cout<<std::dec;它們不會在屏幕上有顯示,只是改變顯示整數的方式。另外,要慎用它們作爲變量名!!!(取決於是否用了編譯指令using來使用名稱空間std)
  6. 成員函數cout.put();可打印字符
  7. 通用字符名的編碼與轉義序列類似,可以以\u(8個十六進制位)或\U(16個十六進制位)開頭
  8. char在默認情況下既不是沒有符號,也不是有符號。是否有符號取決於C++實現,必要時顯式將類型設置爲signed char或unsigned char
  9. cin與cout將輸入和輸出看作是char流
  10. C++中const#define要好,原因:①能明確指定類型;②可以使用C++的作用域規則將定義限制在函數或文件中;③可以將const用於更復雜的類型
  11. 浮點常量在默認情況下爲double類型
  12. C++auto聲明(自動推斷類型)在處理複雜類型時會帶來便利,與此類似的有C#中的var
  13. char grade = 65;char grade = 'A';並不完全等價,對於不同編碼的系統,第二句始終是代表A,但第一句僅僅在編碼爲ASCII碼時是表示字符A。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章