2012-01-26 51 views
0

的成員根據Bjarne的Stroustrup的:當申報

如果(且僅當)您在離開一個初始化的成員,需要它被存儲在內存中的oject,會員必須是(唯一)在某處定義。初始化器可能不會重複。

C++編程語言,第3版,第10.4.6.1)

他給出了這樣的例子:

class curious{ 
    public: 
    static const int c1=7; 
    //.. 
}; 
const int curious::c1; //necessary 

那麼,爲什麼有必要定義一個static成員,因爲我們可能根本沒有初始化它?

此外,const和引用成員沒有在任何地方聲明,即使有必要初始化它們(沒有默認構造函數)。

回答

3

如果您不使用c1需要將其存儲在內存中(如取地址等),編譯器可以將c1的所有用法替換爲值7。但是,如果您以某種方式使用它,則必須提供一個定義,以便它在某個編譯單元中存在。

成員變量不在任何地方聲明,因爲它們在創建時存在於對象內部;每個成員變量都存在於創建的對象內部。 static變量存在於任何對象實例之外(即,無論該類是否實例化,都存在靜態變量),因此它們需要某處(有時)存在,而與某個特定實例無關。