根据标准-集合或联合类型,在其元素或非静态数据成员(包括递归地,子集合或包含的联合的元素或非静态数据成员)中包括上述类型之一,这是允许的:
struct foo {
float x;
};
void bar(foo*);
float values[9];
bar(reinterpret_cast<foo*>(&values));
但是,我不确定以下示例是否也遵循此规则:
struct foo {
float x;
float y;
float z;
};
void bar(foo*);
float values[9];
assert((sizeof(values) / sizeof(float)) % 3 == 0); // sanity check
bar(reinterpret_cast<foo*>(&values));