首頁 > 後端開發 > C++ > 可以使用指定的初始化程序來初始化 C 20 聚合中的繼承成員嗎?

可以使用指定的初始化程序來初始化 C 20 聚合中的繼承成員嗎?

Patricia Arquette
發布: 2024-10-29 02:44:02
原創
462 人瀏覽過

Can Designated Initializers be Used to Initialize Inherited Members in C  20 Aggregates?

C 20 中的指定初始化器和聚合

在C 20 中,指定初始化器透過明確指定成員提供了一種簡潔的方法來初始化聚合型別進行初始化。然而,這種語法在初始化繼承類別時有其限制。

考慮以下程式碼片段:

<code class="cpp">struct Person {
    std::string name;
    std::string surname;
    unsigned age;
};

struct Employee : Person {
    unsigned salary;
};</code>
登入後複製

Person 和Employee 都是聚合,但以下嘗試使用以下方式初始化Employee指定初始化器失敗:

<code class="cpp">Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}};</code>
登入後複製

這是因為C 標準指定指定初始化器只能用於初始化類別的直接非靜態資料成員。在上面的範例中,salary是衍生類別Employee的成員,而不是直接基底類別Person的成員,所以不允許指定初始化。

相反,必須使用傳統的列表初始化來初始化繼承的成員:

<code class="cpp">Employee e1{ "John", "Wick", 40, 50000 };</code>
登入後複製

或者,正如註釋所指出的,可以使用嵌套的指定初始化器列表來初始化基類:

<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
登入後複製

在這種情況下,直接基類被初始化使用指定的初始值設定項列表,而Employee 類別作為一個整體使用常規初始值設定項列表進行初始化。

以上是可以使用指定的初始化程序來初始化 C 20 聚合中的繼承成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板