复制对象数组的构造函数

时间:2014-12-05 14:16:54

标签: c++ copy-constructor

class Base
    {
    public:
        int i;
        Base(int j):i(j){}
    };

    int main()
    {
        Base B(10);
        Base C[10](B);//throws error saying bad array initializer
    }

当我尝试编译此代码时,抛出了上述错误。

为什么C ++不编译此代码?

为什么每个对象都无法调用它的默认复制构造函数并使用B的成员值?

我是否遗漏了C ++标准中的内容?

3 个答案:

答案 0 :(得分:2)

Base C[10](B);

这是C ++中错误的语法;您不能通过传递参数来初始化普通对象数组。

答案 1 :(得分:0)

Base C[10];

也不起作用。 您还需要声明一个默认构造函数,因为您指定了一个将int作为输入,因此默认构造函数不会生成。

答案 2 :(得分:0)

至于我,我认为没有任何理由说明这种结构

Base C[10](B);

或者例如以下

Base *C = new Base[10]( 8 );

无效。它仅取决于您希望如何定义语义。

但是历史上,在C ++中初始化聚合时,使用了brace-init列表。

所以你可以写

Base C[10]{ B, 8, 8, 8, 8, 8, 8, 8, 8, 8 };