C++基礎 const

還想搶救搶救發表於2018-10-13

1. C中的const

  C中const變數只是只讀變數,有自己儲存空間。可能被存放在 棧、堆、資料段,所以可以修改。

2. C++中const

  可能分配空間,也可能不分配空間。

  當 const 為全域性時,並且需要在其他檔案中使用,或當使用 & 操作符取 const 常量的地址時,會分配空間。

3. C++中const 和 #define 的聯絡

   (1)C++編譯器堆const常量的處理

      當碰見常量宣告時,在符號表中放入常量。

      編譯過程中若發現使用常量則直接以符號表中的值替換

      編譯過程中若發現對const修飾的常量使用了 extern 或者 & 操作符,則給對應的常量分配儲存空間。

    (2)const 和 #define 的區別

       const 是在編譯階段處理, #define 是在預編譯處理,

       const 有作用域,型別檢查。 #define 只是純粹的文字替換,作用域從定義開始直到文末或 #undef。

    int a = 1;
    int b = 2;
    int c[a + b];
    上面這種定義是錯誤的(gcc除外)。
    
    const int a = 1;
    const int b = 2;
    int c[a + b];
    這樣在C++中是正確的。
    原因是當 C++ 編譯器掃描到
    const int a = 1;
    const int b = 2;
    會將 a ,b 放到 符號表中。
    當掃描到 int c[a + b];
    會直接將 a,b從符號表中替換,
    也成了 int c[1 + 2];
    所以 #define 和 const 在 C++中類似。