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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-10 03:58:02704浏览

Can a C   class with non-static member initializers be an aggregate?

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

在 C 11 中,如果类或结构满足以下条件,则将其视为聚合:满足特定标准,包括没有用户定义的构造函数、非静态数据成员没有大括号或等号初始化程序以及没有私有或受保护的非静态数据成员。

但是,在标准 C 11 中,将非静态成员初始值设定项添加到类或结构会更改其作为聚合的状态。这是因为成员初始值设定项类似于用户定义的构造函数,这使类或结构失去了作为聚合的资格。定义中的这种更改可能会导致意外的行为。

在提供的示例中:

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

A a{0,1}; // ???

由于存在类内成员初始值设定项,类 A 不再被视为聚合。结果,聚合初始化A a{0,1};无效。

此行为在 C 14 中进行了修订,其中非静态成员初始值设定项的存在不再阻止类或结构成为聚合。因此,在 C 14 中,A 的聚合初始化是有效的。

需要注意的是,C 标准发生了变化,必须检查标准的最新版本或使用兼容的 C 14 或更高版本的编译器,以确保正确解释涉及聚合初始化和非静态成员初始值设定项的代码。

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

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