我想使用单个指针访问连续声明的相同类型的成员数组。
所以对于 example说我有:
struct S
{
double m1[2];
double m2[2];
}
int main()
{
S obj;
double *sp = obj.m1;
// Code that maybe unsafe !!
for (int i(0); i < 4; ++i)
*(sp++) = i; // *
return 0;
}
什么情况下(*)行会出现问题?
我知道存在虚拟函数时肯定会出现问题,但我需要一个比我的假设更结构化的答案
最佳答案
您可以确定结构体的成员按照它们出现的顺序存储在连续的字节 block 中。此外,数组的元素是连续的。所以,看起来一切都很好。
这里的问题是没有标准方法来知道结构中连续成员之间是否存在填充字节。
因此,假设根本不存在填充字节是不安全的。
如果出于某种特定原因,您可以非常确定不存在填充字节,那么 4 个 double
元素将如您所愿是连续的。
关于c++ - 使用单个指针访问连续成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24825646/