簡體   English   中英

嵌套的指定初始化器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM