Home Item 28 - 指定初始化器 (中文)
Post
Cancel

Item 28 - 指定初始化器 (中文)

指定初始化器

在 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。

好處

  1. 清晰: 使代碼更加清晰,容易理解每個成員是如何初始化的。
  2. 靈活: 允許按任意順序初始化成員,不必按照定義的順序。
  3. 安全: 可以避免因成員初始化順序錯誤引起的問題。

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍

Item 28 - Designated Initializer (English)

Item 23 - Concepts(English)