加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 类型是否需要默认构造函数才能声明它的数组?

发布时间:2020-12-16 10:54:21 所属栏目:百科 来源:网络整理
导读:我注意到,当您声明一个数组时,必须使用默认构造函数.是对的吗? 有什么例外吗? 例如, struct Foo{Foo(int i ) {}};int main () { Foo f[5]; return 0;} 上面的代码不能编译. 解决方法 其他答案都可以,但为了完整性:您还可以使用数组初始化语法: Foo f[5]
我注意到,当您声明一个数组时,必须使用默认构造函数.是对的吗?
有什么例外吗?

例如,

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:这两种情况之间存在差异,这可能并不明显,因此值得注意:首先,通过调用Foo(int)ctor,数组元素直接由初始化列表中的int构造.在第二个中,初始化列表由使用显式Foo(int)ctor构造的Foos组成,并且数组元素是从初始化列表中的元素复制构造的.因此在后一种情况下需要Foo的副本.

[1]感谢MSalters的评论.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读