c – 是否可以默认初始化具有已删除默认构造函数的类类型?
|
从cppref所说的约
value initialization
但由于该类类型已删除默认构造函数,该对象如何进行默认初始化? 据我所知,类类型的默认初始化需要访问默认构造函数.如果我们有: struct A {
A() = delete;
int k;
};
然后A * a =新A;会失败,A * a = new A();也是如此. 但是A a {};没关系但为什么?根据cppreference
解决方法
我认为标准只是意味着“如果T是带有删除的默认构造函数的类类型,那么转到默认初始化”.它最终会失败,因为删除了为默认初始化选择的构造函数.它用于区分第二种情况,即“如果T是具有默认构造函数的类型,既不是用户提供也不是删除”,对于这种情况,首先执行零初始化,然后如果T具有非默认初始化-trivial默认构造函数.
因为当A是aggregate type聚合时,执行初始化.请注意,自C 11起,允许显式删除的构造函数用于聚合类型.
和
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
