2011-12-30 106 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