You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:43:17