2012-11-26 84 views
3

如果(且僅當)你需要 它被存儲在內存中的對象的方式使用初始化的成員,該成員必須是(唯一) 某處定義。靜態const int的

從 「C++程序設計語言」

我有一個類

class Bingo{ 
     std::string name; 
    public: 
     Bingo(){} 
     int i; 
     static const int i89=89; 
}; 

,我也不需要有定義,如:

const int Bingo::i89; 
被描述爲

必要。所以我不明白。你能解釋一下這句話的含義嗎?

+0

更改視覺C++標籤C++,沒有什麼視覺C++具體在此,它是C++。 –

+0

我認爲這與ODR有關。類似的問題出現在http://stackoverflow.com/questions/4547660/c-static-member-variable-and-its-initialization。你可以檢查它的信息。 –

回答

0

至於我記得你需要::訪問靜態變量定義時,因爲它是在你的類

+0

問題是爲什麼我不需要const int賓果:: i89; – 4pie0

+0

@ CF16,因爲你不使用它「的方式taht要求它被存儲爲一個對象在內存」 – lenik

+0

有與詮釋,類似於我已經寫在我的例子和INT定義出來的類的實例被描述爲必要的。 – 4pie0

2

當你定義它被稱爲的類中的成員在類初始化

請注意,這樣的成員可以被編譯器視爲編譯時常量,因爲它知道該值不會隨時更改,因此它可以應用自己的優化魔法並簡單地內聯這樣的類成員,即它們不存儲在記憶了。由於它們沒有存儲在內存中,所以不能得到這些成員的地址。反之亦然。

上述從每個C++對象需要獨特的定義和因此每個對象需要被存儲在存儲器中,以便它們可以具有唯一的地址和唯一地標識了Bjarne的理由如下。

因此,報價,

當(且僅當)你在需要它被存儲在存儲器中的對象的方式使用初始化的構件,該構件必須被(唯一)中所定義的某個地方。

+0

有與詮釋,類似於我已經寫在我的例子和INT定義出來的類的實例被描述爲必要的。 – 4pie0

+1

@ CF16:由於程序可能介於確實像'&賓果:: i89',即:需要成員的地址。 –

+0

書中的例子接受這個地址,真實的,但我已盡力,即使當時我並不需要做它被定義 – 4pie0