dem*_*emi 6 c c++ layout pointers member
我们有一个简单的结构(POD).
struct xyz
{
float x, y, z;
};
Run Code Online (Sandbox Code Playgroud)
我可以假设以下代码没问题吗?我可以假设没有任何差距吗?标准说的是什么?对于POD来说是真的吗?课程是真的吗?
xyz v;
float* p = &v.x;
p[0] = 1.0f;
p[1] = 2.0f; // Is it ok?
p[2] = 3.0f; // Is it ok?
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 10
这里的答案有点棘手.C++标准表示POD数据类型将具有C布局兼容性保证(参考).根据C规范的第9.2节,结构的成员将按顺序排列
所以,只要该类型float在当前平台上具有兼容的对齐(它是平台字大小),这个解决方案就可以工作.所以这适用于32位处理器,但我的猜测是64位处理器会失败.基本上在任何sizeof(void*)不同的地方sizeof(float)
标准不保证这一点,并且不适用于许多系统.原因是:
这意味着它p[1]可能位于同一位置xyz.y,或者可能部分重叠,或者根本不重叠.