比方說,我有一個C以下設置++程序,在全球/命名空間範圍(以外的任何塊):EXTERN常量,這是聲明,這是向前聲明
情況1:
a.cpp
extern const int i=5;
b.cpp
extern const int i;
有兩種方式,在我的腦海裏,編譯器可以看到這一點。一個是,真正的聲明是在b.cpp中,而a.cpp只有一個前向聲明和初始化。 (因爲我們知道,對於特定的外部常量,在聲明時不需要初始化)編譯器可能生成的其他可能的可執行文件將包含含有真實聲明的a.cpp,並進行初始化,並且可以看到b.cpp中的語句作爲前向聲明,只需要在那裏協助編譯器知道我是什麼。
編譯器如何決定哪個文件負責實際的聲明,並因此與我相關的內存分配?如果使用了一個有趣的構造函數,而不是int,那麼這可能會有明顯的影響。
如何回答這個問題的變化,如果有的話,有:
情況2:
a.cpp
extern const int i;
extern const int i=5;
b.cpp
extern const int i;
你聲明它是'extern',你也說你知道它的價值。這似乎是錯誤的。 – tadman
@tadman我編譯時沒有任何錯誤。爲什麼這是錯的?我以爲「extern」只是表示標識符名稱具有外部鏈接。這是否也意味着您無法將其初始化爲已知值? – Jeff
通常'extern'的意思是「存儲在另一個文件中」,鏈接器負責使其同步。你如何編譯所有這些? – tadman