2008-12-10 53 views

回答

90

在C++中,當執行進入構造函數的主體時,對象被認爲是完全初始化的。

你說:

「我想知道爲什麼常量必須 在構造函數初始化intialized 列表,而不是在它的身上?」。

你缺少什麼是初始化發生在初始化列表,分配發生在構造函數體。邏輯步驟:

1)const對象只能被初始化。

2)對象的所有成員都在初始化列表中初始化。即使你沒有在那裏明確地初始化它們,編譯器也會很樂意爲你做這件事:-)

3)因此,把1)和2)放在一起,一個const成員只能賦值給它在初始化時發生,這在初始化列表中發生。

+3

恭喜你的第一個答案......^_^ – paercebal 2008-12-10 09:29:21

9

const並且引用變量必須在它們聲明的行上初始化。

class Something 
{ 
    private: 
     const int m_nValue; 
    public: 
     Something() 
     { 
      m_nValue = 5; 
     } 
    }; 

會產生等效的代碼;

const int nValue; // error, const vars must be assigned values immediately 
nValue = 5; 

在構造函數的主體中分配const或引用成員變量值是不夠的。

C++提供了另一種初始化成員變量的方法,它允許在創建成員變量時進行初始化,而不是在之後進行。這是通過使用初始化列表完成的。

您可以通過兩種方式爲變量賦值:顯式隱含: view plaincopy to clipboardprint?

int nValue = 5; // explicit assignment 
double dValue(4.7); // implicit assignment 

使用初始化列表與進行隱式賦值非常相似。

請記住,用於初始化基本和成員數據對象的成員初始化列表位於定義中,而不是構造函數的聲明。

更多關於cpp-tutorialCode Wrangler

-2

由於常量變量和引用必須在聲明時(即在使用之前)初始化。 但構造函數將值分配給一個varaible不initailize變量,因此您必須使用initailizier列表常數和引用

相關問題