C++20是否支持嵌套指定初始化(nested designated initializers)?标准依据查询
C++20嵌套指定初始化问题解答
核心结论
C20完全支持嵌套指定初始化,你提供的代码示例符合C20标准要求,属于合法语法。
你给出的示例代码如下,语法完全合规:
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 } };
规则说明
- C++20引入的指定初始化特性原生支持嵌套聚合类型场景,标准未对嵌套使用指定初始化做任何限制
- 语法的核心约束为:每一级的指定初始化标识仅需要匹配当前层级聚合类型的非静态数据成员即可,内层嵌套的聚合成员可以继续通过指定初始化的方式完成赋值
- 该语法的规范定义可查阅C++20标准草案的
[dcl.init.aggr]章节相关条款
编译器支持情况
目前主流C++编译器均已完整支持嵌套指定初始化特性:
- GCC 10及以上版本
- Clang 10及以上版本
- MSVC 2019 16.1及以上版本
内容的提问来源于stack exchange,提问作者senloa
相关产品推荐
相关产品推荐

