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

C++20中函数返回列表初始化失效,替代方案是否可行?

问题解答

为什么C++20下原代码编译失败

C++20对聚合类的判定规则做了调整:如果类显式声明了任何构造函数(包括被= default显式默认的构造、拷贝构造),或者显式声明了析构函数,那么该类不再被视为聚合类。

原代码中的Test结构体显式默认了默认构造、拷贝构造和析构函数,在C20中不属于聚合类,因此return {1, 2}这种聚合初始化方式不再适用,编译器找不到匹配的构造函数,从而报错。而C17的聚合类判定规则更宽松,允许显式默认这些特殊成员函数,所以原代码在C++17中可以正常编译。

你的解决方案是否正确

添加自定义构造函数Test(int first, int second),并改用return Test(1, 2)的返回方式是完全正确的:

  • 这个自定义构造函数能被编译器直接匹配,通过构造函数初始化对象并返回;
  • 该写法在C17和C20标准下都能正常编译,兼容性良好。

如果不想添加自定义构造函数,另一种方案是移除所有显式默认的特殊成员函数声明,让Test在C++20中重新成为聚合类,这样return {1, 2}的写法就能恢复正常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:14