摘自《c++ primer 4nd》
一些const物件定義在標頭檔案中。而const變數要成為常量表示式,初始化式必須為編譯器可見。為了能夠讓多個檔案使用相同的值,const變數和它的初始化式必須是每個檔案可見的。而要使初始化式可見,一般把這樣的const變數定義在標頭檔案中。那樣的話,無論該const變數何時使用,編譯器都能夠看見其初始化式。
但是,c++中的任何變數都只能定義一次,定義會分配儲存空間,而所有對該變數的使用都關聯到同一儲存空間。因為const物件預設為定義它的檔案的區域性變數,所以把它們的定義放在標頭檔案中是合法的。
當我們在標頭檔案中定義了const變數後,每個包含該標頭檔案的原始檔都有了自己的const變數,其名稱和值都一樣。
當該const變數是用常量表示式初始化時,可以保證所有的變數都有相同的值。但是在實踐中,大部分的編譯器在編譯時都會用相應的常量表示式來替換對這些const變數的使用。所以,在實踐中不會有任何儲存空間用於儲存用常量表示式初始化的const變數。
如果const變數不是用常量表示式初始化,那麼它就不應該在標頭檔案中定義。相反,和其他的變數一樣,該const變數應該在乙個原始檔中定義並初始化。應在標頭檔案中為它新增extern宣告,以使其能被多個檔案共享。
from :
const物件為什麼可以在標頭檔案中定義
對於標頭檔案中為什麼可以定義const變數 或物件 以及推薦用const代替 define巨集定義,之前一直概念不清晰,今天就總結一下。之前在網上查過,解釋的都不太到位,或者角度不一樣 從編譯原理 強弱定義?總之不能清晰理解,發現 c primer 上基本上涵蓋了所有平常遇到的c c 問題,而且 c...
C 標頭檔案的若干說明和const物件定義
在使用c 進行程式開發的時候,有個常識我們很熟悉,就是把類的定義寫在.件中,把類的具體實現寫在.cpp檔案中。這毫無疑問是對的。但我們很少去思考為什麼要這樣做,本文結合自己的學習體會,對頭檔案及const物件的定義進行一些說明。1。為什麼要使用標頭檔案 使用標頭檔案就是為了在希望使用一些共同函式或資...
const變數定義於標頭檔案中
一。首先要知道強弱符號 編譯器編譯原始檔時會把原始檔的全域性符號 global symbol 分成強 strong 和弱 weak 兩類傳給彙編器,而隨後彙編器則將強弱資訊編碼並儲存在目標檔案的符號表中。那麼何謂強弱呢?編譯器認為函式與初始化了的全域性變數都是強符號,而未初始化的全域性變數則成了弱符...