嵌套指定初始化器

3
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上找不到相关内容。
2个回答

5

是的,这是支持的,cppreference - 聚合初始化 表明:

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

对于聚合体,列表初始化是聚合初始化。

请注意,真正的嵌套C指定初始化器,即执行 outer = {.inner.name = ""}; ,在C ++中不受支持。所需的解决方法正是您所编写的内容。


1

是的,这个程序是格式良好的。

对于内部初始化器适用于外层初始化器适用的相同规则。外层初始化器在指定初始化器方面并不特殊。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接