1、值替代 C語言中預處理器用值代替名字: #define BUFSIZE 100 C++用const把值代替帶進編譯器領域: const bufsize = 100 ;或 const int bufsize = 100 ; 同時還可以執行常量折疊: char buf[bufsize] ; 1.1 頭文件裡的const 與使用#define一樣,使用const必須把const定義放在頭文件裡。這樣,通過包含頭文件,可把const定義單獨放在一個地方,並把她分配給一個編譯單元。const默認為內部連接,即僅在const被定義過的文件裡才是可見的,而在連接時不能被其他編譯單元看到。 比如說在Test.h中定義了, const int nTestConst = 1000; 在A.cpp中include"Test.h" 同時在B.cpp中include"Test.h" 不會出現,當沒有定義為const時,因變量定義出現兩次而出錯的情形. 當定義一個const常量時,必須賦一個值給它,除非用extern作了清楚的說明: extern const bufsize ; 雖然上面的extern強制進行了存儲空間分配,但C++編譯器並不為const分配存儲空間,相反它把這個定義保存在它的符號表裡。當const被使用時,它在編譯時會進行常量折疊。 1.2 const的安全性 如果想要一個值保持不變,就應該使它成為一個常量const)。 1.3 集合 const可以用於集合,但必須分配內存,意味著“不能改變的一塊存儲”。但其值在編譯時不能被使用。 const int i [] = {1,2,3,4}; // float f [ i [3] ]; // Illegal 2,指針 當使用帶有指針的const時,有兩種選擇:1、或者const修飾指針正指向的對象,2、const修飾存儲在指針本身的地址。 2.1 指向const的指針 使用指針定義的技巧,正如任何復雜的定義一樣,是在標識符的開始處讀它並從裡到外讀。如果我們要使正指向的元素不發生改變,得寫: const int * x; 從標識符開始:“x 是一個指針,指向一個const int。” 把const從一邊移到另一邊,結果一樣。 int const * x; 2.2 cosnt指針 是指針本身成為一個const指針,必須把const標明的部分放在*的右邊,如: int d = 1; int * const x = &d; 指針本身是const指針,編譯器要求給它一個初始化值,這個值在指針壽命期間不變。然而要改變它所指向的值是可以的,可以寫*x = 2。 這些可以總結成這樣一句話: 以*為分界點, 當const在*的左邊時,實際物體值不變 當const在*的右邊時,指針不變, 即,左物右指 這樣來記比較方便!!