C++结构体内存分配

5

如果我在C++中定义了如下结构体

struct ComplexFloat {
  float r;
  float i;
};

我声明两个变量,写法如下:

struct ComplexFloat cf;
float *f=(float*)cf;

我能否安全地假设以下条件始终成立

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1]))

换句话说,我可以安全地假设在一个包含浮点数的结构体中,其元素将在内存中占据连续的位置,并按照结构体定义中出现的顺序排序吗?

我测试了一下,在Ubuntu上使用gcc 4.8.2,这是正确的。我只是想确保它总是有效的。


那个表达式甚至无法编译,cf 不是一个数组或指针。 - Some programmer dude
如果这只是出于学术好奇,那么没问题,但如果是为了生产代码,你可能需要重新考虑你的设计。 - R Sahu
感谢@JoachimPileborg,我已经纠正了问题。 - oromoiluig
此外,这将违反严格别名规则 - Some programmer dude
1个回答

2

如果你不能控制结构体中数据的对齐方式,那么你就不能假设我会在正确的位置。在 r 和 i 之间可能存在对齐填充。


它们必须按照相同的顺序。 - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接