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++中類似。