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

Clang拒绝但GCC接受new C[]{1},哪个编译器符合C++标准?

哪个编译器的行为符合C++标准?

你的代码符合C++11及以后的标准,GCC和MSVC的行为正确,Clang的报错属于实现问题。

原因分析

根据C++标准中动态数组初始化的规则:

  • 使用new T[]{初始化列表}语法时,数组大小会自动由初始化列表的元素数量推导(这里列表仅含1,因此数组大小为1)。
  • 数组的每个元素通过列表初始化构造:对于你的C类,C{1}会直接调用C(int)构造函数完成初始化,这完全符合标准要求。

Clang的错误提示显示它错误地认为需要无参构造函数,这是旧版本Clang未正确实现“省略数组大小的动态数组列表初始化”特性导致的缺陷,新版本Clang已修复该问题,可正常编译这段代码。

等价验证代码

你的代码逻辑等价于显式指定数组大小的写法,该写法在所有合规编译器中都能正常编译:

C *ptr{new C[1]{1}};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:35:38