C 11 具有非静态成员初始化器的类的聚合初始化
类内成员初始化器的使用可以显着影响类的行为C.具体来说,它提出了在这些情况下类是否仍然是聚合的问题。
在 C 11 中,类内成员初始值设定项引入了一个重要的限制:它们禁止将类或结构分类为聚合。这在 C 11 标准草案中很明显,该标准将聚合定义为“没有用户提供的构造函数的类,没有非静态数据成员的大括号或等号初始化程序,没有私有或受保护的非静态数据成员,没有基类,并且没有虚函数。”通过引入类内初始化器,类变得类似于用户定义的构造函数,失去其聚合状态。
但是,此限制在 C 14 中被取消。成员初始化器不再阻止类被视为汇总,因为该标准已被修订以消除此限制。此更改在 N3605 中进行了详细介绍,它建议取消对具有成员初始值设定项的聚合的限制。
此更改的基本原理源于认识到成员初始值设定项不等于用户定义的构造函数。虽然它们有一些相似之处,但成员初始化器与聚合初始化的概念更加一致,聚合初始化旨在成为初始化对象的轻量级且高效的方法。
总之,在 C 11 中,类内成员初始化器取消了类的聚合状态资格,但此限制在 C 14 中被删除,从而允许类初始化具有更大的灵活性。
以上是具有类内成员初始值设定项的类在 C 中仍然是聚合吗?的详细内容。更多信息请关注PHP中文网其他相关文章!