前言
C++20引入了指派初始化器,以使用它们的名称初始化所有聚合的数据成员。聚合成员是满足以下限制的数组类型的对象或结构或类的对象:仅public数据成员、无用户声明或者继承的构造函数、无虚函数和无虚基类、private或protected的基类。指派初始化器以点开头,后跟数据成员的名称。指派初始化的顺序必须与数据成员声明的顺序相同。不允许混合使用指派初始化器和非指派初始化器。未使用指派初始化器初始化的任何数据成员都将使用其默认值进行初始化,这意味着:
1拥有类内初始化器的数据成员会得到该值。
2没有类内初始化器的数据成员会被零初始化。
代码如下(示例):
struct Employee
{
char firstInitial;
char lastInitial;
int employeeNumber;
int salary { 75'000 };
}
Employee emp {
.firstInitial = 'J',
.lastInitial= 'D',
.employeeNumber= 42,
.salary = 80'000
};
如果对没写成员的默认值感到满意,则可以跳过对他们的初始化。
struct Employee
{
char firstInitial;
char lastInitial;
int employeeNumber;
int salary { 75'000 };
}
Employee emp {
.firstInitial = 'J',
.lastInitial= 'D',
};
//emp.employeeNumber == 0
//emp.salary == 75'000
相比于统一初始化器,使用指派初始化器更容易理解正在初始化的内容。