You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带删除默认构造函数的类类型能否被默认初始化?

关于C++值初始化、默认初始化与列表初始化的困惑

最近看C++相关资料的时候,碰到了一个让我搞不懂的点,想请教一下:

首先看到关于值初始化的描述:

若T是无默认构造函数、或拥有用户提供的或被删除的默认构造函数的类类型,则对象被默认初始化(default initialization);

这里我就懵了——如果类的默认构造函数已经被删除了,那怎么还能完成默认初始化呢?毕竟按照我之前的理解,类类型的默认初始化是必须要访问默认构造函数的啊。

比如我写了这样一段代码:

struct A { A() = delete; int k; };

测试的时候发现:

  • A *a = new A; 编译失败,这符合预期;
  • A* a = new A(); 同样编译失败,也说得通;
  • 但A a{}; 居然能正常编译通过,这就让我完全摸不着头脑了。

另外我还看到关于列表初始化的描述:

否则,若空的花括号初始化列表用于类类型T且T拥有默认构造函数,则执行值初始化。

这就更矛盾了,A明明没有可用的默认构造函数,为什么A a{};还能成功呢?

内容的提问来源于stack exchange,提问作者choxsword

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:08:21