C 11 具有非静态成员初始化器的类的聚合初始化
在 C 11 中,具有用户定义构造函数和私有构造函数的结构和类或受保护的非静态数据成员不被视为聚合。从历史上看,具有非静态成员初始值设定项的类也是如此,即使它们缺少用户定义的构造函数。
但是,在 C 14 中,此限制被删除。现在,具有非静态成员初始值设定项的类仍然可以是聚合,只要它们满足聚合的其他要求:
例如:
struct A { int a = 3; int b = 3; }; int main() { A a{0, 1}; // This is now allowed in C++14 return 0; }
此更改的动机是希望将聚合初始化的行为与直觉保持一致。类内初始值设定项本质上等同于用户定义的构造函数,但阻止类成为聚合是违反直觉的。
自 G 5.0 起,带有非静态数据成员初始值设定项的 C 14 聚合已经支持使用 std=c 1y 或 -std=c 14。
以上是具有非静态成员初始值设定项的类可以在 C 14 中聚合吗?的详细内容。更多信息请关注PHP中文网其他相关文章!