2011-12-30 116 views
7

我試着像這樣(這犯規編譯):如何使用初始化列表來初始化數組元素?

struct mystruct { 
    somestruct arr[4]; 
    mystruct(somestruct val) : arr[0](val), arr[1](val), arr[2](val), arr[3](val) {} 
}; 

如何在C這個做得最好++?

注意:我可能只想用這種方法設置數組元素的的一些

+1

可能重複[我如何使用成員初始化列表來初始化它?](http://stackoverflow.com/questions/5602030/how-can-i-use-member-initialization-list-to-initialize-it ) – ildjarn 2011-12-30 17:50:05

+0

+1用於嘗試使用初始化程序列表,而不是在構造函數的主體內分配值。 – Andre 2011-12-30 17:56:41

+0

@Andre,與「在構造函數體內賦值」有什麼不同嗎? (我不能測試,因爲我沒有編譯器,邁克的例子使用) – Rookie 2011-12-30 17:58:10

回答

6

在C++ 11,如果你想設置的所有元素:

mystruct(somestruct val) : arr{val,val,val,val} {} 

在C++ 03或C++ 11,如果你只是想設置一些要素:

mystruct(somestruct val) { 
    arr[0] = val; 
    arr[1] = val; 
    arr[2] = val; 
    arr[3] = val; 
} 
+1

太糟糕了,它不適用於visual-C++編譯器,即時使用後者,認爲有更好的方法。順便說一句,編譯器是否像上面那樣快地優化後者? – Rookie 2011-12-30 17:56:43

+0

爲了編譯,您可能需要使用-std = C++ 11標誌。您應該擁有某種可以設置它的偏好設置窗格。 – 2014-03-05 21:09:56

+0

使用'-std = C++ 0x'編譯器選項,我所做的全部都是'classname :: clasname():array {num1,num2,num3,num4} {/ *所有構造函數或方法或變量賦值都放在這裏*/}'。我最初對你的解決方案的末尾有些'{}'感到困惑,但後來很快意識到它是構造函數的主體:-) – enthusiasticgeek 2014-12-29 02:09:42