我注意到当你声明一个数组时,必须需要默认构造函数。是对的吗?
有什么异常(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/