c++结构中的运行时大小的数组

Run-time sized array in a c++ struct

本文关键字:数组 运行时 c++ 结构      更新时间:2023-10-16

在C(使用gcc)中,我曾经有一些数据结构是一个带有一些额外信息的数组:

struct song {
    uint tempo;
    uint key;
    note play[0]; // or play[] depending on compiler flavour
};

Iirc,被称为"灵活阵列"(http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-长度)然后,我可以在运行时用malloc(sizeof(song)+N*sizeof(note))分配一首N个音符的歌曲。如果我这次不打算使用向量,也不打算在song中引入无用的note*指针,那么g++在多大程度上支持这一点?

即使在C中,这也是未定义的且不可移植的。GCC在知情的情况下允许您逃脱惩罚,但其他实现可能不会。这是因为您正在访问超出其边界的数组。

这个"技巧"在C++中和在C中一样有效。也就是说,在GCC文档中表示支持的GCC中可以随意使用它,但它永远不会是"定义明确、有效的C++"。

除了使用固定长度或注释之外,没有其他方法*因为编译器必须知道你的歌曲结构有多长,而且每个结构都有相同的长度。

所以你必须使用一个音符*或一个向量