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

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

Barbara Streisand
发布: 2024-11-21 00:49:13
原创
587 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板