初始化结构数组 - C++

Posted

技术标签:

【中文标题】初始化结构数组 - C++【英文标题】:Initialize array of structs - c++ 【发布时间】:2021-06-25 15:25:40 【问题描述】:

我正在尝试用 C++ 初始化一个结构数组。

这是我的结构:

typedef ap_fixed<16,1> ap_fixed_data_type;
typedef struct 

    ap_fixed_data_type real_part;
    ap_fixed_data_type imaginary_part;

 my_data_struct;

这是我的结构数组:

static my_data_struct IFFT_output[1024];

我想使用(如果可能的话)标准数组的相同“语法”来初始化我的结构数组,例如:

int my_array[1024] = 0;

这会将我的数组初始化为全 0。

我想要达到的目标是:

static my_data_struct IFFT_output[1024]=0,0;

此代码应将每个结构中的每个字段(real_partimaginary_part)初始化为 0。 使用上面的代码我得到这个错误:

在抛出一个实例后调用终止 '__gnu_cxx::recursive_init_error'

这似乎是由错误的初始化静态变量(如here)引起的。

我知道我可以使用简单的for 循环来初始化我的数据,但我想做一些更“紧凑”的事情。

有没有办法用上面显示的“语法”初始化我的结构数组?

【问题讨论】:

我的错,错字。固定 【参考方案1】:

这在我看来像 C。如果你想使用 C++,你可以:

using ap_fixed_data_type = ap_fixed<16,1>;
struct my_data_struct

    my_data_struct()
        : real_part(/*initialization code here*/)
        , imaginary_part(/*initialization code here*/)
    
    // more initialization code here
    
    ap_fixed_data_type real_part;
    ap_fixed_data_type imaginary_part;

;

std::vector<my_data_struct> vec(1024);
std::array<my_data_struct, 1024> array;

【讨论】:

建议:my_data_struct() : real_part0, imaginary_part0 如果ap_fixed 没有默认构造函数。 我正在使用的环境接受 c++,我以这种方式编写代码,因为它似乎是完成我需要的最简单的方法。有没有办法用我展示的语法初始化我的数组?仍然是一个非常有用的答案 @MattiaSurricchio 使用static my_data_struct IFFT_output[1024]; 比使用std::array&lt;my_data_struct, 1024&gt; IFFT_output; 没有性能优势,您只会失去安全性。没有构造函数也容易出错。如果您有 C++ 编译器,我认为编写 C 代码没有任何好处 这段代码是一个更大的代码的一部分,它旨在被合成并在硬件上运行,越容易/越低级越好。需要 static 关键字,因为它是一个需要存储在内存中的寄存器 这些只是关于如何使用my_data_struct 类型的多个元素的示例。 std::vector 使用动态内存分配,这在您事先不知道大小时很有用,std::array 基本上是一个具有额外安全性和特性的 C 样式数组。

以上是关于初始化结构数组 - C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ 错误:初始化结构实例的向量数组成员

在 C++ 中的类构造函数中初始化结构数组

在 C++ 中使用 memset 初始化具有不同值的结构数组元素

C++静态结构体数据成员的初始化

具有 char 数组的 C++ 结构以不寻常的方式初始化为零

未初始化的 C++ 结构的行为