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

C++20中struct是否存在编译器生成的带参构造函数?

C++20中struct支持括号初始化的原因

你遇到的情况不是因为C20给struct新增了编译器生成的构造函数,而是C20扩展了聚合类型的初始化规则——允许使用圆括号()对聚合类型进行初始化,这和此前的花括号{}初始化效果一致。

  • 聚合类型判定:struct默认所有非静态成员都是public,符合C++标准里聚合类型的定义;class默认成员是private,不满足聚合类型的要求(聚合要求所有非静态数据成员为public),因此没法用这种方式初始化。
  • 版本差异:C17及更早版本中,聚合类型只能用花括号{}初始化,不能用圆括号,所以切换到C17或改用class时会出现error: no matching function call to 'Test::Test(int, int)'的错误。
  • 例外情况:如果把class的成员显式声明为public,它也会被视为聚合类型,在C++20环境下同样可以用圆括号初始化。

另外要注意:标准C++里void main()不是合法的主函数定义,正确写法是int main(),GCC允许void main()只是编译器扩展,不属于标准行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:13:12