if T is a class type with no default constructor or with a user-provided or deleted default constructor,the object is default-initialized;
但由于该类类型已删除默认构造函数,该对象如何进行默认初始化?
据我所知,类类型的默认初始化需要访问默认构造函数.如果我们有:
struct A { A() = delete; int k; };
然后A * a =新A;会失败,A * a = new A();也是如此.
但是A a {};没关系但为什么?根据cppreference
Otherwise,If the braced-init-list is empty and T is a class type with a default constructor,value-initialization is performed.
解决方法
A a{}
is OK,but why?
因为当A是aggregate type聚合时,执行初始化.请注意,自C 11起,允许显式删除的构造函数用于聚合类型.
In all cases,if the empty pair of braces {} is used and T is an aggregate type,aggregate-initialization is performed instead of value-initialization.
和
An aggregate is one of the following types:
- array type
- class type (typically,struct or union),that has
- no private or protected non-static data members
- no user-provided
,inherited,or explicit (since C++17)
constructors(explicitly defaulted or deleted constructors are allowed) (since C++11)
原文地址:https://www.jb51.cc/c/115048.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。