列表初始化
在C++11及以后的版本中,使用{}
来初始化变量是一种新的初始化方法,称为列表初始化(List Initialization)。这种初始化方法可以用来初始化内置类型、自定义类型以及聚合类型。
示例代码:
/*AVL 树节点类*/
struct TreeNode{
int val{};
int height = 0;
TreeNode *left{};
TreeNode *right{};
TreeNode() = default;
TreeNode(int x) : val(x), height(0), left(nullptr), right(nullptr) {}
};
示例中,int val{}
使用初始化列表来初始化val
变量。这里{}
表示空列表,它将val
初始化为0,这是整型的默认值。这是等价于使用int val = 0;
。
使用列表初始化还有一些优点:
- 更清晰的语法:使用
{}
明确表示变量的初始化过程。 - 避免类型收窄:列表初始化不允许将值初始化为不匹配的类型,这有助于防止某些类型的错误。
下面是一些列表初始化的例子:
int a{}; // a 初始化为 0
int b{42}; // b 初始化为 42
double c{1.2}; // c 初始化为 1.2
TreeNode *left{}; // left 初始化为 nullptr
在构造函数初始化列表中{}
也可以用来初始化成员变量,上述代码的构造函数中:
TreeNode(int x) : val(x), height(0), left(nullptr), right(nullptr) {}
这里,height
被初始化为0,left
和right
被初始化为nullptr
。如果成员变量的类型支持列表初始化,并且想要将它们初始化为默认值,也可以使用{}
来替代赋值:
TreeNode() : val{}, height(0), left{}, right{} {}
注意height
不能使用{}
进行初始化,因为在其定义时未使用列表初始化。