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中文網其他相關文章!