2011-07-15 73 views
1

可能重複:
What is the member variables list after the colon in a constructor good for?這是什麼在構造函數聲明意味着

我發現這個代碼,它Vector3f類的構造函數。

Vector3f::Vector3f() 
    : x(0) 
    , y(0) 
    , z(0) 
{ 

} 

請問這個定義 「:X(0),Y(0),Z(0)」 的意思,以及如何將我到處去使用它嗎?

+0

如果沒有FAQ條目,應該有。尋找... –

+0

有:http://stackoverflow.com/questions/210616/what-is-the-member-variables-list-after-the-colon-in-a-constructor-good-for –

+0

@Fred公平地說,它並不能真正解釋你爲什麼要使用初始化列表,還有一半用於解釋::運算符 – Josh

回答

4

這被稱爲類initaging列表。必須有3個成員變量,x y z,它是所有的人設置爲0

退房http://www.cprogramming.com/tutorial/initialization-lists-c++.html

類的初始化列表是整齊的,因爲它們允許你前右側設置類狀態的初始值在構造函數中的代碼被執行。這是剛剛在你的構造函數分配值不同,使得可能的一些事情:

  1. 它們允許你將值分配給const成員
  2. 他們是值傳遞給的構造函數的唯一方法父類
  3. 它們是實例化需要某種類型值傳遞給構造函數的類的基於堆棧的成員對象的唯一方法。
3

它被稱爲在C++中的初始化列表

初始化變量x,yz

在這種情況下(假設xy & zint)是一樣的:

x = 0 
y = 0 
z = 0 

作爲@Charles貝利,適當地指出,萬一類型不int但一些自定義用戶定義的類然後分配&建設可能不完全相同。

說明:
在初始化列表,所述類型是初始化通過調用每一個可變的適當的默認構造,對於像int一個內置的數據類型,這是相同分配但對於自定義類的構造函數操作可能與賦值操作不同。

+1

你不能說在這種情況下它是相同的,而不知道'x'的類型,'y '和'z'。當然,如果它們是(例如)int,那麼它會有相同的效果,但是它們可能具有用於構造和賦值的不同行爲的類類型,或者它們甚至可能是'const'。 –

+0

@Charles Bailey:沒錯,我只是假設他們是'整數',但的確應該澄清。我添加了要回答的細節。 –

1

基本類型是一樣的

x = 0; 
y = 0; 
z = 0; 

雖然實際上有一個體內初始化列表和任務之間的細微差別。當我們通過初始化列表初始化字段時,構造函數將被調用一次。如果我們使用賦值,那麼字段將首先使用默認構造函數初始化,然後通過賦值運算符重新賦值爲實際值。