首页 >后端开发 >C++ >具有非静态成员初始值设定项的类可以在 C 14 中聚合吗?

具有非静态成员初始值设定项的类可以在 C 14 中聚合吗?

Susan Sarandon
Susan Sarandon原创
2024-11-29 03:50:13519浏览

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

C 11 具有非静态成员初始化器的类的聚合初始化

在 C 11 中,具有用户定义构造函数和私有构造函数的结构和类或受保护的非静态数据成员不被视为聚合。从历史上看,具有非静态成员初始值设定项的类也是如此,即使它们缺少用户定义的构造函数。

但是,在 C 14 中,此限制被删除。现在,具有非静态成员初始值设定项的类仍然可以是聚合,只要它们满足聚合的其他要求:

  • 没有用户定义的构造函数
  • 没有私有或受保护的非-静态数据成员
  • 没有基类
  • 没有虚拟函数

例如:

struct A
{
  int a = 3;
  int b = 3;
};

int main()
{
  A a{0, 1}; // This is now allowed in C++14
  return 0;
}

此更改的动机是希望将聚合初始化的行为与直觉保持一致。类内初始值设定项本质上等同于用户定义的构造函数,但阻止类成为聚合是违反直觉的。

自 G 5.0 起,带有非静态数据成员初始值设定项的 C 14 聚合已经支持使用 std=c 1y 或 -std=c 14。

以上是具有非静态成员初始值设定项的类可以在 C 14 中聚合吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn