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

具有非静态成员初始化器的类可以在 C 中聚合初始化吗?

Barbara Streisand
Barbara Streisand原创
2024-11-21 00:49:13542浏览

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in C  ?

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

在 C 中,聚合初始化是初始化类或类的成员的便捷语法。 struct 而不显式调用构造函数。然而,类内成员初始值设定项的使用引发了类/结构是否仍然是聚合的问题。

C 11 和聚合状态

根据 C 11 标准中,具有类内成员初始值设定项可防止类/结构被视为聚合。这是因为成员初始值设定项类似于用户定义的构造函数,而在聚合中不允许使用这些构造函数。

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

A a{0, 1}; // Invalid for C++11

C 14 和聚合初始化

但是,在C 14中,这个限制被取消了。现在允许具有非静态成员初始值设定项的类/结构进行聚合初始化。进行此更改是为了解决开发人员反馈并简化对聚合初始化的理解。

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

A a{0, 1}; // Valid for C++14

G 对 C 14 聚合的支持

请注意,G 版本 5.0 及更高版本支持具有非静态成员初始值设定项的类/结构的 C 14 聚合初始化。然而,旧版本的 G 可能无法识别此语法。

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

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