2013-10-11 45 views
1

我有一個包含大小爲100個X對象的數組的Y類。在VS2012上初始化數據成員數組元素爲零?

class Y{ 
    unsigned int x_array[100]; 
}; 

我需要初始化此數組,以便所有元素都爲零。這是可能在Visual Studio中做的,如果不是,我可以做什麼?如果我這樣做:

unsigned int x_array[100] = {0}; 

我得到一個編譯錯誤,說不允許數據成員初始化。

(英特爾C++編譯器V13)

+0

據我所知數據成員初始化是一個C++ 11功能,使用類似的語法。如果您沒有使用C++ 11功能,請檢查是否有編譯器設置強制定位舊標準? 編輯:這只是一個瘋狂的猜測,我還沒有做過任何C++年齡 – LostSalad

+1

你總是可以''x_array()'在構造函數的初始化列表中。 (自從vs2010以來,我相信)。 – WhozCraig

+0

@LostSalad我有一種感覺,這是C++ 11 VS2012沒有實現的一個特性。 – user997112

回答

4

你所試圖做的是隻因爲C++ 11,在C++ 03以下應該做的:

class Y{ 
public: 
    Y() : x_array() { } 
    unsigned int x_array[100]; 
}; 

還要考慮使用std::vector<unsigned int>相反:

#include <vector> 

class Y{ 
public: 
    Y() : x(std::vector<unsigned int>(100, 0)) { } 
    std::vector<unsigned int> x; 
}; 
+0

+1。如果OP想知道第一個來自哪裏,C++ 11§8.5,p5-7 *自2010年起在VS中實現,儘管您可能必須禁止他們的「嗨,您正在使用新的03x功能,以防萬一你不知道。「警告。 (警告編號逃離我.sry)。編輯:我不知道如果英特爾的CC可以做到這一點,但從[此功能列表](http://software.intel.com/en-us/articles/c0x-features-supported-by-intelc-c-編譯器)如果他們沒有,我會感到驚訝。並且請注意,v14確實支持非靜態初始化器,因此可能需要升級。 – WhozCraig