具有非静态成员初始化器的类的聚合初始化
在 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中文网其他相关文章!