我們知道,在C++(非C語言)中,const限定符對默認存儲類型稍有影響。在默認情況下,全局變量的鏈接性為外部的,但是const全局變量的鏈接性為內部的,也就是說,在C++中全局變量const定義就像是用了static說明符一樣。
因此,可以將const常量定義在頭文件中供工程中的多個其他文件包含引用,並且編譯時候不會產生變量重復定義的錯誤,當然也可以使用#define宏定義。
一般常量定義並沒有問題。但是,如果const要限定的時指針就要特別注意。以字符數組為例,請看下面代碼:
#ifndef CONST_HEADER_H_ #define CONST_HEADER_H_ const char* CONST_STRING = "WinkJie"; // 錯誤!指針 CONST_STRING 並非 const 常量,所以該頭文件 // 被多個文件包含時,會有變量重復定義的編譯錯誤。 const char* const CONST_STRING = "WinkJie"; // 正確,CONST_STRING 是指向常量的常量指針。 const char CONST_STRING[] = "WinkJie"; // 正確,數組名是一個常量指針 //CONST_STRING 是 const char [7] 類型。 char* const CONST_STRING = "WinkJie"; // 正確,CONST_STRING 是常量指針。 namespace // 正確 { char CONST_STRING[] = "WinkJie"; } namespace // 正確 { char* CONST_STRING = "WinkJie"; } namespace // 正確 { const char* CONST_STRING = "WinkJie"; } #endif // CONST_HEADER_H_