聚合初始化

聚合初始化使用大括号,主要用于初始化结构体的,如果是类的话则必须都是public成员(不太常用):

1
2
3
4
5
struct Data {
    std::string name;
    double value;
};
Data x{"test1", 6.778};

从C++17开始,聚合还可以有基类,因此可以初始化从其他类/结构体派生而来的结构体:

1
2
3
4
struct MoreData : Data {
    bool done;
};
MoreData y{{"test1", 6.778}, false};

https://toutiao.io/posts/tt34ysp/preview https://en.cppreference.com/w/cpp/language/aggregate_initialization

聚合初始化有三种形式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
struct Employee
{
    int id {};
    int age {};
    double wage {};
};

int main()
{
    Employee frank = { 1, 32, 60000.0 }; // 拷贝列表初始化,使用大括号
    Employee robert ( 3, 45, 62500.0 );  // 使用小括号的直接初始化(C++20)
    Employee joe { 2, 28, 45000.0 };     // 使用大括号列表的列表初始化(推荐)
    return 0;
}