2011-02-28 213 views
1
struct CUSTIOMSTRUCT 
{ 
    FLOAT x, y, z; 
    DWORD color; 
}; 

CUSTOMSTRUCT MyVertex = {320.0f, 50.0f, 1.0f, 0xFF00FFCC}; 

我不明白,部分:初始化C++結構

{320.0f, 50.0f, 1.0f, 0xFF00FFCC}; 

我必須把它們按順序?

很抱歉,但我是C#的傢伙。

+0

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/designators.htm – madmik3

回答

5

是的,你必須把它們按順序。 C語言C99版提供「標記」骨料初始化,它允許一個「把他們」壞了,但它不是在C++中(沒有?)。

+0

是以往任何時候都可能是在C++中,因爲我們有構造函數? –

+0

這也不是即將出現的C++標準。 –

2

是的,他們必須在聲明的順序,那麼{X,Y,Z,顏色}。

-5

更確切地說,

{}運算符返回一些內存字節, 所以當u使用

{320F,50F,1F,0xFF00FFCC} 它返回一個持續16個字節的內存,然後通過「memcpy」命令複製到結構變量。

所以,如果你把這些無序,程序編譯罰款,但不工作的罰款。

的更好的選擇是使用構造函數。

+8

-1,這是誤導。在C++語言中沒有操作符{},該語法中的語法是*初始化子句*。即使假設你是用其他名稱來引用它,你所描述的行爲也不同於* initializer子句*所做的。例如,如果初始化子句只是'{320f}',它仍然會將結構的其餘部分初始化爲0,相當於'{320f,0f,0f,0}'即大括號初始化器的效果取決於儘可能多地在對象被初始化爲與支撐本身的內容一樣。在此過程中不會調用「memcpy」。 –

+0

大衛,你完全錯了。首先,操作員並不一定是編譯時操作員(正如你應該已經知道的那樣),其次,你提供的例子完全證明了我的理論!您可以使用memcpy的數據不足。第三,沒有調用memcpy,因爲這是編譯時操作,但對於C#人來說,這是最好的解釋。 – AbiusX