C++11中如何初始化包含联合体的结构体数组?
含联合体的结构体数组大括号初始化方案
在C++11中,要初始化包含联合体的FilterSelect数组,必须明确指定联合体FilterConfig的目标成员——因为联合体成员共享内存空间,编译器无法自动推断要初始化的成员。以下是两种合规的初始化写法:
方法一:完全展开的聚合初始化
逐层展开大括号,清晰指定联合体的成员名称:
FilterSelect filter_select[2] = { // 第一个元素:低通滤波器配置 { FilterType::kLowPass, { .low_pass_config = FilterLowPassConfig::k10kHzLowPass } }, // 第二个元素:平均滤波器配置 { FilterType::kAverage, { .average_config = FilterAverageConfig::kWindowSize64 } } };
方法二:简化写法
利用C++11聚合初始化的特性,省略部分冗余大括号,让代码更紧凑:
FilterSelect filter_select[2] = { { FilterType::kLowPass, { .low_pass_config = FilterLowPassConfig::k1kHzLowPass } }, { FilterType::kAverage, { .average_config = FilterAverageConfig::kWindowSize32 } } };
注意事项
- 必须使用指定初始化器(
.成员名 = 初始化值的形式)初始化联合体,否则会因成员歧义触发编译错误。 - 该方案完全基于C++11标准实现,无需依赖Boost等第三方库。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

