2011-06-18 173 views
-2

我們能初始化一個const變量如下正在初始化常量變量

int var1 = 10; 
const int var2 = var1; 

會不會做任何編譯器任何警告/錯誤?

+3

它真的叫做const變量嗎?這感覺像一個矛盾。 –

+0

@David:在C或C++標準中沒有「變量」的概念。我想,技術術語是「常量對象」。 –

+2

這個問題沒有顯示任何研究工作。 –

回答

0

是的,沒關係。它是C和C++標準的一部分。一個常量對象可以用一個非const對象來初始化。爲什麼不呢?

+1

嗯... downvote?你能否提供一份來自標準的報價,說這不正常? :) –

10

取決於代碼的位置。

如果它是在一個函數內,那麼var1var2是自動的,那麼是的,這很好。 var2只能通過複製var1進行初始化,所以var1可以稍後修改的事實與var2不能這樣的事實沒有關係。

如果它在文件範圍內,那麼var1var2是靜態的,那麼不是不好。文件範圍內的const整型對象必須用編譯時必須知道的值進行初始化(在C++中,這稱爲「整型常量表達式」,我忘記它是否也是精確的C術語)。在這種情況下,您可能會認爲因爲兩個定義之間沒有代碼,所以var1的值在編譯時已知爲10,但由於該類型是非常量,所以標準仍然禁止它。你可以認爲這是爲了避免實現需要足夠聰明來應用這種推理,並證明沒有什麼能夠修改var1:它所要看的只是類型,而不是介入代碼。