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

私有构造函数与统一初始化的异常行为求解(VC19+C++17)

私有构造函数与统一初始化的行为差异解释
  • Obj o; 触发默认初始化,会尝试调用类的默认构造函数,但你将Obj()声明为私有,外部无法访问,因此编译报错符合预期。

  • Obj o{10}; 触发聚合初始化,而非调用构造函数,这是核心原因:
    根据C++17标准,Obj属于聚合类型,判定依据如下:

    1. 类中没有用户提供的构造函数——你声明的Obj() = default;属于用户声明但非用户提供的构造函数,不影响聚合类型的判定;
    2. 非静态数据成员a是公有的;
    3. 类没有基类、虚函数等不符合聚合类型的特征。

    聚合初始化会直接对类的公有非静态数据成员进行初始化,完全不需要调用任何构造函数,因此私有默认构造函数的访问限制不会对其产生影响,编译可以正常通过。

注:该行为符合C++17标准,你使用的VC19(MSVC 2019)正确实现了这一规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:19