【发布时间】:2015-06-18 19:49:18
【问题描述】:
如果我在 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不是数组或指针。 -
如果这是出于学术好奇心,那很好,但如果是为了生产代码,您可能需要重新考虑您的设计。
-
感谢@JoachimPileborg,我更正了问题
-
另外,这将违反strict aliasing rule。