1. 程式人生 > >c++ primer 筆記第二章變數和基本型別(二)

c++ primer 筆記第二章變數和基本型別(二)

2.4 const限定符

const定義的變數不能改變,因此const變數必須初始化。可以使用表示式初始化。

預設狀態下const物件僅在檔案內有效。

可以在宣告和定義都加extern。

練習2.26 (a) 不合法,未初始化 (b) 合法 (c) 合法 (d) 不合法,不能改變const的值。

2.4.1 const的引用

引用繫結到常量上,成為對常量的引用,簡稱常量引用。

初始化常量引用時可以使用任意表達式,可以不匹配型別。

對常量的引用不要求被引用的物件必須是常量。

2.4.2 指標和const

指向常量的指標,const double pi = 3.14;  const double *cptr = π。

指向常量的指標可以指向非常量。

常量指標必須初始化。const double * const p = π

練習2.27(a) 不合法,引用不能繫結字面量。 (b) 合法 (c) 合法 (d) 合法 (e) 合法 (f) 不合法,未初始化 (g) 合法

練習2.28 (a) 不合法 i是整數物件 cp是指向整型的常量指標 cp未初始化 (b) 不合法 p2未初始化  (c) 不合法 ic未初始化 

(d) 不合法 未初始化 (e)  合法 p是指向常整型的指標

練習2.29 (a) 合法 (b) 不合法 int*指標不能指向const int (c)同b (d)不合法 常量指標不能改變地址 (e) 常量指標不能賦值 (f) const int 不能賦值

2.4.3 頂層const

  頂層const是指指標本身的值不能變,底層const指指標指向的物件是常量。

  執行拷貝時,頂層const被忽略,底層const需要考慮。

  練習2.30 頂層 無 無 無 底層 頂層加底層 底層

2.4.4 constexpr和常量表達式

  常量表達式指不會改變且編譯時得到結果的表示式。如字面值。

  constexpr變數,由編譯器驗證變數是否為常量表達式。使用字面值型別。

  constexpr設定指標為頂層const。

  練習2.32 不合法 constexpr int null = 0, *p = null;

2.5 處理型別

  2.5.1 類型別名

   typedef 使用關鍵字進行定義,如 typedef double wages; typedef wages base,*p;

   using SI = Sales_item;別名宣告。

   符合型別的別名宣告容易出錯。

  2.5.2 auto型別說明符

   auto 自動推斷語句中的變數型別。因此auto變數需要初始值。

   auto宣告多個變數,變數型別需要相同。

   auto忽略頂層const,保留底層const。加const保留頂層const。

   練習2.33 TTTFFF

   練習2.35 j:int     k:const int &    p:const int *     j2:const int    k2:const int&

   2.5.3 decltype型別指示符

    decltype判斷表示式的結果型別,如decltype(f()) sum = x;

    decltype對解引用操作得到引用型別。變數加括號當作表示式,返回引用型別。

    練習2.36 c int 3     d int& 指向a    c 4   a 4

    練習2.37 c int  d int& 指向a

    練習2.38 int a = 3; auto b = a; decltype(a) c = b;

                   const int a = 3; auto b = a; decltype(a) c = b;

2.6 自定義資料結構

    2.6.1 定義Sales_data 型別

        類內初始值與預設初始化。

        練習2.39 visual studio 2013 無提示       

        練習2.40

struct Sales_data {
       std::string bookNo;
       unsigned units_sold = 0;
       double price = 0;
}

    2.6.2 使用Sales_data類

      練習2.41 略

     2.6.3 編寫自己標頭檔案

      類通常定義在標頭檔案種,類所在標頭檔案名字應與類相同。

      標頭檔案保護符 #ifndef  xxx #define xxx #endif