【问题标题】:Initializing member array in constructor initialization list (before C++11)在构造函数初始化列表中初始化成员数组(C++11之前)
【发布时间】:2012-11-14 14:18:40
【问题描述】:

据我所知,在 C++11 之前,在构造函数初始化列表中初始化成员数组的唯一方法是执行以下操作,例如:

MyClass::MyClass(int arg) : member(arg), memberArray() {
    // anything else that needs to be done in the c'tor
}

但是,我有几个人告诉我他们不赞成这种方法,并且在构造函数主体的 for 循环中对其进行零初始化可能会更安全/更具可读性。

我还没有 C++11 支持,所以我不能使用初始化列表等。是否有任何人听说过不鼓励在构造函数初始化列表中初始化成员数组的准则?

另外,测试表明没有,但是将这种语法用于多维数组应该没有任何问题,对吗? (例如,这不是某些编译器出于某种原因搞砸的标准的一部分......)

我并不是说这是一个主观问题——我只是想知道是否有充分的理由使用/不使用上述语法。

非常感谢您的帮助。

【问题讨论】:

  • 不,这不是唯一的方法,MyClass::MyClass(int arg) : member(arg), memberArray(some_function(arg))some_function 构造你想要的值,效果很好。
  • @ArmenTsirunyan 我确实看到了这个问题,但我更感兴趣的是这是否是一种好的做法,而不是如何去做。
  • 在 C++03 中,您只是无法初始化成员数组(值初始化除外)。
  • @KerrekSB 那么上面的语法不起作用吗?我以为它对成员数组进行了零初始化,不是吗?
  • @llakais:是的,确实如此——这就是值初始化。但是您不能将数组初始化为任何 other 值。如果你所需要的只是零,那么你很好。

标签: c++ arrays multidimensional-array coding-style initialization-list


【解决方案1】:

您可能想看看 StackOverflow 上的 related question :使用静态函数在初始化列表中初始化您的成员数组可以实现您正在寻找的内容:

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() )
{
}

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多