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 上找不到它。
是的,这是支持的,cppreference - 聚合初始化状态:
如果初始化子句是嵌套的花括号初始化列表(不是表达式),则相应的数组元素/类成员/公共基数 (C++17 起) 将从该子句进行列表初始化:聚合初始化是递归的。
列表初始化是聚合的聚合初始化。
outer = {.inner.name = ""};请注意, C++ 不支持真正嵌套的 C 指定初始值设定项,即“doing” 。所需的解决方法正是您所写的。
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |