C++11新初始化方法 使用{}初始化變數

风陵南發表於2024-09-04

列表初始化

在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,leftright被初始化為nullptr。如果成員變數的型別支援列表初始化,並且想要將它們初始化為預設值,也可以使用{}來替代賦值:

TreeNode() : val{}, height(0), left{}, right{} {}

注意height不能使用{}進行初始化,因為在其定義時未使用列表初始化。

相關文章