2010-04-27 28 views

回答

5

這看起來應該是一個構造函數;如果是這樣,應該沒有返回類型,它需要具有相同的名稱作爲類,例如,

myClass::myClass() 
    : member1(0), member2(1) 
{ 

} 

只有構造可以有一個初始化列表;您不能將該類型的初始化委託給Init函數。

任何非靜態成員都可以在構造函數初始化列表中初始化。所有的const和引用成員必須在構造函數初始化列表中初始化。所有的東西都是相等的,you should generally prefer to initialize all members in the constructor initializer list,而不是構造函數的主體(有時候不可能,或者使用初始化列表很笨拙,在這種情況下,你不應該使用它)。

+0

好的,這是有道理的。但是我收到了錯誤,之前聲明只有靜態const成員可以在類中聲明。這是否意味着只有靜態和常量成員可以從類聲明中分配一個值,與初始化器列表或構造器主體相反。 – numerical25 2010-04-27 02:07:24

+1

只能在類聲明中初始化靜態集成成員。任何非整數成員都必須從類聲明的外部進行初始化。 (即你不能在聲明中初始化靜態浮點數,但你可以使用int,short,char或bool)。 – 2010-04-27 02:11:38

0

靜態類成員不屬於任何特定對象。靜態成員在該類的所有對象之間共享。因此,您不要在構造函數中初始化它們 - 例如,這會重新初始化它們。

現在有一個問題,爲什麼只有靜態的類成員可以在類本身初始化。原因在於該類最有可能位於標題中,並且該標題包含在多個翻譯單元中。這會導致編譯器出現問題。在哪個翻譯單元(即哪個目標文件)中應該放入實際的初始化?但對於簡單的const,這並不重要。 int const TWO = 2;在翻譯單元中不需要實際的初始化,編譯器只是記住它。

相關問題