我注意到当你声明一个数组时,默认构造函数是必须要用到的。那正确吗? 有没有异常(exception)?
例如,
struct Foo{
Foo(int i ) {}
};
int main () {
Foo f[5];
return 0;
}
上面的代码无法编译。
最佳答案
其他答案都可以,但是,为了完整性:您也可以使用数组初始化语法:
Foo f[5] = {1,2,3,4,5};
如果 Foo 的构造函数不是显式的,这会起作用。如果是,你必须......明确:
Foo f[5] = {Foo(1), Foo(2), Foo(3), Foo(4), Foo(5)};
注意1:这两种情况之间的区别可能并不明显,因此值得注意:第一种情况下,数组元素直接由初始化列表中的 int
,通过调用 Foo(int)
构造函数。在第二种情况下,初始化列表由使用 explicit Foo(int)
构造函数构造的 Foo
组成,数组元素是复制构造的来自初始化列表中的元素。因此,在后一种情况下需要 Foo 的复制构造函数。
[1] 感谢 MSalters 的评论。
关于c++ - 类型是否需要默认构造函数才能声明它的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231414/