在构造函数初始化列表中初始化成员数组(C++11之前)

5
据我所知,在C++11之前,构造函数初始化列表中初始化成员数组的唯一方法是使用以下方式:
MyClass::MyClass(int arg) : member(arg), memberArray() {
    // anything else that needs to be done in the c'tor
}

然而,有些人告诉我他们不赞成这种方法,最好在构造函数体中使用for循环对其进行零初始化,这样可能更安全/更易读。
由于我没有C++11支持,因此无法使用初始化列表等功能。是否有任何指导方针来阻止在构造函数初始化列表中初始化成员数组?
另外,测试表明,使用此语法来处理多维数组应该没有问题,对吗?(例如,这不是某些编译器由于某种原因而捣乱的标准的一部分...)
我的意思并不是这个问题具有主观性-我只是想知道是否有充分的理由使用/不使用上述语法。
非常感谢您的帮助。

2
不,那不是唯一的方法。MyClass::MyClass(int arg) : member(arg), memberArray(some_function(arg)),其中som_function构造了你想要的值,也可以完美地工作。 - john
1
@ArmenTsirunyan 我看到了那个问题,但我更感兴趣的是这是否是一个好的实践方法,而不仅仅是如何去做。 - llakais
1
在C++03中,你根本无法初始化成员数组(除了值初始化)。 - Kerrek SB
1
@KerrekSB上面的语法不起作用吗?我以为它会将成员数组初始化为零,不是吗? - llakais
1
@llakais:是的,它可以 - 这就是值初始化。但你不能将数组初始化为任何其他值。如果你只需要零,那么没问题。 - Kerrek SB
显示剩余6条评论
1个回答

5

您可能想看一下StackOverflow上的相关问题:在初始化列表中使用静态函数来初始化成员数组可以实现您想要的效果:

class MyClass
{
   typedef std::array< int, 2 > t_myA;
   static t_myA fillFunction(){ static t_myA const ret = {1,2}; return ret; };

   t_myA myArray;

   public MyClass();
}

MyClass::MyClass()
 : myArray( fillFunction() )
{
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接