可能重複:
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)」 的意思,以及如何將我到處去使用它嗎?
可能重複:
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)」 的意思,以及如何將我到處去使用它嗎?
這被稱爲類initaging列表。必須有3個成員變量,x y z
,它是所有的人設置爲0
退房http://www.cprogramming.com/tutorial/initialization-lists-c++.html
類的初始化列表是整齊的,因爲它們允許你前右側設置類狀態的初始值在構造函數中的代碼被執行。這是剛剛在你的構造函數分配值不同,使得可能的一些事情:
const
成員它被稱爲在C++中的初始化列表。
初始化變量x
,y
和z
。
在這種情況下(假設x
,y
& z
是int
)是一樣的:
x = 0
y = 0
z = 0
作爲@Charles貝利,適當地指出,萬一類型不int
但一些自定義用戶定義的類然後分配&建設可能不完全相同。
說明:
在初始化列表,所述類型是初始化通過調用每一個可變的適當的默認構造,對於像int
一個內置的數據類型,這是相同分配但對於自定義類的構造函數操作可能與賦值操作不同。
你不能說在這種情況下它是相同的,而不知道'x'的類型,'y '和'z'。當然,如果它們是(例如)int,那麼它會有相同的效果,但是它們可能具有用於構造和賦值的不同行爲的類類型,或者它們甚至可能是'const'。 –
@Charles Bailey:沒錯,我只是假設他們是'整數',但的確應該澄清。我添加了要回答的細節。 –
基本類型是一樣的
x = 0;
y = 0;
z = 0;
雖然實際上有一個體內初始化列表和任務之間的細微差別。當我們通過初始化列表初始化字段時,構造函數將被調用一次。如果我們使用賦值,那麼字段將首先使用默認構造函數初始化,然後通過賦值運算符重新賦值爲實際值。
如果沒有FAQ條目,應該有。尋找... –
有:http://stackoverflow.com/questions/210616/what-is-the-member-variables-list-after-the-colon-in-a-constructor-good-for –
@Fred公平地說,它並不能真正解釋你爲什麼要使用初始化列表,還有一半用於解釋::運算符 – Josh