指定初始化器
在 C++20 中,designated initializer 是一種語法,允許我們在初始化結構體或聯合體時,顯式地指定每個成員的初始化方式。這種語法源自 C 語言,在 C++20 中得到了支持。使用 designated initializer,可以在初始化列表中指定要初始化的特定成員,而不是按照成員在結構體或聯合體中定義的順序依次初始化。
基本語法:
1
2
3
4
5
6
StructType instance = {
.member1 = value1,
.member2 = value2,
// ...其他成員
};
其中,.member 指定了要初始化的結構體或聯合體成員,value 是初始化該成員的值。
code
1
2
3
4
5
6
struct Point {
int x;
int y;
int z;
};
我們可以使用 designated initializer 來初始化這個結構體的成員:
1
2
3
4
5
Point p = {
.x = 1,
.z = 3,
.y = 2
};
相信有使用過 python 的人對這個語法應該都不陌生吧。
我們可以不按成員定義的順序進行初始化,這樣就可以不用每次初始化時,都要小心翼翼的看結構成員定義的順序, 因粗心而造成沒必要的 bug。
好處
- 清晰: 使代碼更加清晰,容易理解每個成員是如何初始化的。
- 靈活: 允許按任意順序初始化成員,不必按照定義的順序。
- 安全: 可以避免因成員初始化順序錯誤引起的問題。
