[英]Nested designated initializers
C++ 20 是否允許嵌套的指定初始值設定項? 例如:
struct Outer {
int32_t counter;
struct {
std::string name;
} inner;
struct {
std::optional<int32_t> value;
} inner_optional;
};
Outer outer = {
.counter = 100,
.inner = {
.name = "test" // nested
}
};
如果允許,有人可以提供指向可信來源的鏈接嗎? 我在 cppreference 上找不到它。
是的,這是受支持的, cppreference - 聚合初始化狀態:
如果初始化子句是嵌套的花括號初始化列表(它不是表達式),則相應的數組元素/類成員/公共基(C++17 起)從該子句列表初始化:聚合初始化是遞歸的。
列表初始化是聚合的聚合初始化。
注意真正嵌套的 C 指定初始化器,即做outer = {.inner.name = ""};
, 在 C++ 中不受支持。 所需的解決方法正是您所寫的。
是的,顯示的程序格式正確。
相同的規則適用於內部初始化程序,也適用於最外層初始化程序。 對於指定的初始化器,最外層的初始化器並不特殊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.