在我的代码中,我必须考虑一个数组数组,其中内部数组具有固定维度。为了利用 STL 算法,将数据实际存储为数组数组很有用,但我还需要将该数据传递给 C 库,该库采用扁平的 C 样式数组。
如果能够以可移植的方式廉价地转换(即展平)多维数组,那就太好了。我将坚持一个非常简单的案例,真正的问题更普遍。
struct my_inner_array { int data[3]; };
std::vector<my_inner_array> x(15);
是
&(x[0].data[0])
指向大小为 45*sizeof(int) 的连续内存块的指针,其中包含与 x 相同的条目?还是我必须担心对齐?恐怕这对我有用(至少对于某些数据类型和内部数组大小),但它不可移植。
- 此代码是否可移植?
- 如果没有,有没有办法让它工作?
- 如果没有,您对我能做什么有什么建议吗?
- 如果 my_inner_array 不是 POD 结构,但包含一些方法(只要该类不包含任何虚拟方法),它是否会改变任何东西?