在构造函数的初始化列表中初始化数组

Posted

技术标签:

【中文标题】在构造函数的初始化列表中初始化数组【英文标题】:Initialize array in constructor's initialization list 【发布时间】:2012-06-04 00:17:19 【问题描述】:

我正在尝试在构造函数的初始化列表中初始化一个数组,并且我希望该数组的大小为 MAX_SIZE,这是我的 Stack 类中的一个公共静态常量。我怎样才能让它工作?编译器抱怨说他们在将 'double' 分配给 'double[0u]' 时有不兼容的类型

这是我的代码:

class Stack 
    public:      
          Stack();
          static const unsigned MAX_SIZE; 
    private:
          double array[];
          unsigned elements;     
    ;  // class Stack

    Stack::Stack(): array( array[MAX_SIZE] ), elements(0) 

    const unsigned Stack::MAX_SIZE = 4;

提前感谢您的帮助。

【问题讨论】:

除非你完全自虐:static const unsigned max_size = 4; std::vector<double> array; Stack::Stack() : array(MAX_SIZE) 有没有更简单的方法?即不使用向量。如何让程序接受大小为 MAX_SIZE 的数组数据成员? 我会习惯使用std::vector。我很少使用数组;我几乎每次都会使用std::vector 作为首选。 @Jesse Good 给出的代码也应该可以工作。 有正当理由避免使用向量。向量总是在堆上初始化,而数组可以在栈上初始化。 【参考方案1】:
 class Stack 
        public:
              Stack();
              static const unsigned MAX_SIZE = 4;
        private:
              double array[MAX_SIZE];
              unsigned elements;
        ;  // class Stack

 Stack::Stack():  array(), elements(0) 

但是,std::vector 会更好,如 cmets 中所述。

【讨论】:

我明白了.. 所以,基本上,避免在初始化列表中初始化数组。不可能,对吧?另外,不能像我那样在 main 之后写我的 MAX_SIZE 常量吗? 我问的原因是因为我在这里读到的不同,定义应该在课堂之外:publib.boulder.ibm.com/infocenter/comphelp/v8v101/… array() 在初始化器列表零中初始化所有元素。你是对的,我没有定义MAX_SIZE,因为我只是在代码中使用它的值。如果需要在其他地方使用MAX_SIZE,请在类外定义。 @Sean:您不需要像在其他情况下那样为 static const <integer type> 变量单独定义。 @mezhaka:是的,这个表格叫做value initialization

以上是关于在构造函数的初始化列表中初始化数组的主要内容,如果未能解决你的问题,请参考以下文章

在构造函数初始化器列表中初始化函数指针数组 - 错误

C++中数组的构造函数初始化列表

带有数组的 C++ 构造函数初始化列表

构造函数初始值设定项列表中长度未知的数组

如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?

在构造函数的初始化列表中初始化列表