列表初始化
在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
不能使用{}
進行初始化,因為在其定義時未使用列表初始化。