我注意到当你声明一个数组时,必须需要默认构造函数。是对的吗?
有什么异常(exception)吗?

例如,

struct Foo{
Foo(int i  ) {}
};

int main () {
    Foo f[5];
    return 0;
}

上面的代码不能编译。

最佳答案

其他答案都可以,但为了完整性:您还可以使用数组初始化语法:

Foo f[5] = {1,2,3,4,5};

如果 Foo 的 ctor 不明确,这会起作用。如果是的话,你必须是......明确的:
Foo f[5] = {Foo(1), Foo(2), Foo(3), Foo(4), Foo(5)};

注意 1:两种情况之间有一个区别,可能并不明显,因此值得注意:在第一种情况下,通过调用 int ctor,直接从初始化列表中的 Foo(int) 构造数组元素。在第二个中,初始化列表由 Foo s 构成,使用 explicit Foo(int) ctor 构造,数组元素是从初始化列表中的元素复制构造的。因此在后一种情况下需要 Foo 的复制构造函数。

[1] 感谢 MSalters 的评论。

关于c++ - 类型是否需要默认构造函数才能声明它的数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2231414/

10-11 22:55
查看更多