嵌套指定初始值设定项

sen*_*loa 3 c++ c++20

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
    }
};

Run Code Online (Sandbox Code Playgroud)

如果允许的话,有人可以提供可信来源的链接吗?我在 cppreference 上找不到它。

Qui*_*mby 5

是的,这是支持的,cppreference - 聚合初始化状态:

如果初始化子句是嵌套的花括号初始化列表(不是表达式),则相应的数组元素/类成员/公共基数 (C++17 起) 将从该子句进行列表初始化:聚合初始化是递归的。

列表初始化是聚合的聚合初始化。

outer = {.inner.name = ""};请注意, C++ 不支持真正嵌套的 C 指定初始值设定项,即“doing” 。所需的解决方法正是您所写的。