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

如何在C++中初始化包含联合体的结构体数组?

初始化带联合体成员的结构体数组:可行方案

完全可以使用大括号初始化列表来初始化这个FilterSelect数组,以下是两种常用的实现方式:

方式一:指定初始化器(推荐,C++11及以上)

这种方式通过明确指定联合体的成员,代码可读性强,避免歧义:

FilterSelect filter_select[2] = {
    {
        FilterType::kLowPass,
        {.low_pass_config = FilterLowPassConfig::k1kHzLowPass}
    },
    {
        FilterType::kAverage,
        {.average_config = FilterAverageConfig::kWindowSize256}
    }
};

用.low_pass_config和.average_config直接指定要初始化的联合体成员,编译器会准确将枚举值赋值到对应的成员内存位置。

方式二:顺序初始化(不推荐)

如果不使用指定初始化器,也可以按结构体和联合体的成员顺序进行初始化,但这种方式可读性差,且容易因结构体/联合体成员顺序变更导致错误:

FilterSelect filter_select[2] = {
    {FilterType::kLowPass, {FilterLowPassConfig::k10kHzLowPass}},
    {FilterType::kAverage, {static_cast<FilterLowPassConfig>(FilterAverageConfig::kWindowSize128)}}
};

注意:联合体成员共享内存,顺序初始化只会赋值给联合体的第一个成员(此处为low_pass_config)。若要给average_config赋值需强制类型转换,但逻辑上不严谨——相当于把average_config的枚举值存到low_pass_config的内存中,后续读取average_config属于未定义行为,因此不建议使用这种方式。

内容的提问来源于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:13